是否可以定义 xs:any 并在其中包含必须的元素?
我对具有结构的 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 子元素,该子元素只需要有一个名称位于集合 {"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>
但它无效。 我需要帮助。
提前致谢。
I'm interested in XML files with structure:
<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>
metadata element need to have at least one ANY_EXTERNAL_ELEMENT child that need to have only one child element with name in set {"reference", "value"}.
Is it possible to achieve it in XMLSchema?
What I tried:
<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>
But it's not valid.
I need help.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,你不能像这样限制“外部”元素。的内容模型仅允许<注释>。反转结构不是更自然吗:
但是,当然,我不知道你的用例是什么。
No, you cannot constrain an "external" element like that. The content model for <any> allows only <annotation>. Wouldn't it be more natural to kind of invert the structure:
But, of course, I have no idea what your use case is.
我认为如果您想包含它们的类型,您必须在 xs:choice 中或通过替换组枚举可能的元素(ANY-EXTERNAL-ELEMENT-1 等)。
I think you have to enumerate the possible elements (ANY-EXTERNAL-ELEMENT-1 etc) either in an xs:choice or by means of a substitution group if you want to contain their type.