加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML Schema:为什么不能有孩子?这怎么可以绕过?

发布时间:2020-12-16 08:01:25 所属栏目:百科 来源:网络整理
导读:我正在尝试为 property创建一个模式元素必须具有 key子元素, val shell中的一个或 perl和可选的 os或条件,并且子元素的顺序并不重要。 以下是有效 property的一些示例。内容: property keyA/key valb/val/propertyproperty keyA/key valb/val osWindows/o
我正在尝试为< property>创建一个模式元素必须具有< key>子元素,< val>< shell>中的一个或< perl>和可选的< os>或<条件>,并且子元素的顺序并不重要。

以下是有效< property>的一些示例。内容:

<property>
  <key>A</key>
  <val>b</val>
</property>

<property>
  <key>A</key>
  <val>b</val>
  <os>Windows</os>
</property>

<property>
  <condition>a == 1</condition>
  <key>A</key>
  <perl>1+1</perl>
  <os>unix</os>
</property>

理想情况下,我想到使用< xs:all>为了这:

<xs:element name="property">
  <xs:complexType>
    <xs:all>
      <xs:element name="key" type="xs:string" />
      <xs:choice>
        <xs:element name="val" type="xs:string" />
        <xs:element name="perl" type="xs:string" />
        <xs:element name="shell" type="xs:string" />
      </xs:choice>
      <xs:element name="os" type="xs:string" minOccurs="0" />
      <xs:element name="condition" type="xs:string" minOccurs="0" />
    </xs:all>
  </xs:complexType>
</xs:element>

但是我发现,< xs:all>只能包含< xs:element>而不是< xs:choice&gt ;.有人可以解释为什么吗? 更重要的是,有人可以提供一种方法来验证这样的<属性>元件?

我可以把三个元素 – < val>< perl>和<壳> – 作为< xs:all>中的可选元素,但是我希望模式验证该元素中只有一个存在于该元素中。这可以做吗

我认为这是一个更好的,因为“选择”现在是自己的元素(typeFacet),但不能直接使用它是抽象的。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="property">
    <xs:complexType>
      <xs:all>
        <xs:element name="key" type="xs:string" />
        <xs:element ref="typeFacet" />
        <xs:element name="os" type="xs:string" minOccurs="0" />
        <xs:element name="condition" type="xs:string" minOccurs="0" />
      </xs:all>
    </xs:complexType>
  </xs:element>

  <xs:element name="typeFacet" abstract="true" />
  <xs:element name="val" type="xs:string"   substitutionGroup="typeFacet" />
  <xs:element name="perl" type="xs:string" substitutionGroup="typeFacet" />
  <xs:element name="shell" type="xs:string" substitutionGroup="typeFacet" />
</xs:schema>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读