我对结构为的XML文件感兴趣:
<resource>
<type>STRING</type>
<metadata>
<ANY_EXTERNAL_ELEMENT1>
<value>STRING</value>
</ANY_EXTERNAL_ELEMENT1>
<ANY_EXTERNAL_ELEMENT2>
<reference>STRING</reference>
</ANY_EXTERNAL_ELEMENT2>
<ANY_EXTERNAL_ELEMENT3>
<value>STRING</value>
</ANY_EXTERNAL_ELEMENT3>
</metadata>
</resource>
元数据元素需要至少有一个ANY_EXTERNAL_ELEMENT子项,该子项只需要一个名为set {“reference”,“value”}的子元素。
是否可以在XMLSchema中实现它?
我尝试了什么:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="resource">
<xs:complexType>
<xs:all>
<xs:element name="type" type="xs:string"/>
<xs:element name="metadata">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="1">
<xs:complexType>
<xs:choice>
<xs:element name="reference"/>
<xs:element name="value"/>
</xs:choice>
</xs:complexType>
</xs:any>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
但它无效。 我需要帮助。
提前致谢。
答案 0 :(得分:2)
不,你不能限制像这样的“外部”元素。 &lt; any&gt;的内容模型仅允许&lt; annotation&gt;。反转结构会不会更自然:
<resource>
<type>STRING</type>
<metadata>
<external value="STRING">
<ANY-EXTERNAL-ELEMENT-1/>
</external>
<external ref="STRING">
<ANY-EXTERNAL-ELEMENT-2/>
</external>
</metadata>
</resource>
但是,当然,我不知道你的用例是什么。
答案 1 :(得分:1)
我认为你必须在xs:choice中枚举可能的元素(ANY-EXTERNAL-ELEMENT-1等),或者如果你想包含它们的类型,可以通过替换组枚举。