这是我的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>
知道这是怎么可能的吗?
答案 0 :(得分:0)
xs:alternative
是Conditional Type Assignment的一部分,需要:
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解决这个问题?