代码之家  ›  专栏  ›  技术社区  ›  Preet Sangha

如何指定(xsd)元素具有子标记或简单内容-但不能同时指定二者

xsd
  •  1
  • Preet Sangha  · 技术社区  · 15 年前

    编辑:这不是我最后一个问题的翻版,因为我不想同时做这两个问题了。

    我要指定我的设置节点具有以下任一项:

       <setting name='Some Setting'>
          SomeData
        </setting>
    

    模式是:

      <xs:element name="setting">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="name" type="xs:string" use="required" />
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    

      <setting name='Some Setting'>
        <value>SomeData</value>
      </setting>
    

    模式是:

    <xs:element minOccurs="0" name="setting">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="value" type="xs:string" />
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required" />
      </xs:complexType>
    </xs:element>
    

    但并非两者兼而有之。

    我不知道如何在整个模式中组合它们。 我试过用 <xs:choice /> 但是,这会抱怨具有相同名称的元素需要具有相同的类型

    2 回复  |  直到 15 年前
        1
  •  4
  •   devuxer    15 年前

    mixed="true"

    <xs:complexType>
      <xs:sequence>
        <xs:element name="setting">
          <xs:complexType mixed="true">
            <xs:sequence>
              <xs:element name="value" type="xs:string" minOccurs="0" />
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
    

    value

    1. <setting name="Some Setting">SomeData</setting>
      
    2. <setting name="Some Setting">
        <value>SomeData</value>
      </setting> 
      
    3. <setting name="Some Setting">
        Some Data
        <value>SomeData</value>
      </setting>
      

    setting

        2
  •  1
  •   superfell    15 年前