XSD xs:替代给定文本

时间:2017-08-03 13:57:34

标签: xml xsd

这是我的xml文件的一部分:

<MY_ATTRIBUTES>
  <ATTRIBUTES>
      <ID>first_id</ID>
      <TYPE>first_type</TYPE>
      <FILE1>my_file1</FILE1>
  </ATTRIBUTES>
  <ATTRIBUTES>
      <ID>second_id</ID>
      <TYPE>second_type</TYPE>
      <FILE2>my_file2</FILE2>
      <FILE3>my_file3</FILE3>
  </ATTRIBUTES>
</MY_ATTRIBUTES>

我需要编写相应的xsd文件。我的问题是元素的数量和名称取决于TYPE元素的文本。我尝试通过xs替代方案:替代方案,但我没有成功:

<xs:element name="TYPE" type="xs:string">
    <xs:alternative test="text() eq first_type'" type="first_type"/>
    <xs:alternative test="text() eq second_type'" type="second_type"/>
</xs:element>


<xs:complexType name="first_type">
    <xs:sequence>
        <xs:element name="TYPE" type="xs:string" fixed="first_type"/>
        <xs:element name="FILE1" type="xs:string"/>
    </xs:sequence>
</xs:complexType>

知道这是怎么可能的吗?

2 个答案:

答案 0 :(得分:0)

xs:alternativeConditional Type Assignment的一部分,需要:

  • XSD 1.1
  • xs:alternative/@test测试属性,而不是元素。

如果您能够使用XSD 1.1并且能够重新设计XML以便类型信息包含在属性中,那么您可以按照 How to make type depend on attribute value using Conditional Type Assignment

答案 1 :(得分:0)

当然我能够像这样重新设计我的xml

  <MY_ATTRIBUTES>
      <ATTRIBUTES ID="first_id" type="first_type">
          <FILE1>my_file1</FILE1>
      </ATTRIBUTES>
      <ATTRIBUTES ID="second_id" type="second_type">
          <FILE2>my_file2</FILE2>
          <FILE3>my_file3</FILE3>
      </ATTRIBUTES>
   </MY_ATTRIBUTES>

但看起来它不可能使用XSD1.1,因为它不适用于python。有没有其他解决方案可以用XSD1.0解决这个问题?