在 XSD 中定义混合元素允许 "nesting"
Defining mixed element in XSD allowing "nesting"
我面临以下问题。我需要为我的 XML 文件创建一个 XSD 模式。假设我有几个 "Conversation Objects" 个节点:
- 留言
- 结束
- 效果
这些是我能够在 XSD 中描述的简单元素。然后我有一个特别的叫:
- 是或否
这种元素的结构如下:
<yesOrNoAnswer actor="" bar="" points="" percentage=""> message text
<yes>
...
</yes>
<no>
...
</no>
</yesOrNoAnswer>
在那些 "yes" 和 "no" 节点中,我可以重复使用开头定义的任何简单 "Conversation Objects" 或 "yesOrNoAnswer" 节点,允许嵌套我想要多少级别。如何在 XSD 中定义整个 "yesOrNoAnswer" 节点(包括属性、文本、"yes" 和 "no" 节点)?提前致谢!
XSD 1.0
此 XSD 将代表您描述的约束并验证您的 XML:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="ConversationObjectGroup">
<xs:choice>
<xs:element name="Message"/>
<xs:element name="End"/>
<xs:element name="Effect"/>
</xs:choice>
</xs:group>
<xs:element name="yesOrNoAnswer" type="YesOrNoAnswerType"/>
<xs:complexType name="YesOrNoAnswerType" mixed="true">
<xs:sequence>
<xs:element name="yes" type="yesOrNoType"/>
<xs:element name="no" type="yesOrNoType"/>
</xs:sequence>
<xs:attribute name="actor"/>
<xs:attribute name="bar"/>
<xs:attribute name="points"/>
<xs:attribute name="percentage"/>
</xs:complexType>
<xs:complexType name="yesOrNoType" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="ConversationObjectGroup"/>
<xs:element ref="yesOrNoAnswer"/>
</xs:choice>
</xs:complexType>
</xs:schema>
我面临以下问题。我需要为我的 XML 文件创建一个 XSD 模式。假设我有几个 "Conversation Objects" 个节点:
- 留言
- 结束
- 效果
这些是我能够在 XSD 中描述的简单元素。然后我有一个特别的叫:
- 是或否
这种元素的结构如下:
<yesOrNoAnswer actor="" bar="" points="" percentage=""> message text
<yes>
...
</yes>
<no>
...
</no>
</yesOrNoAnswer>
在那些 "yes" 和 "no" 节点中,我可以重复使用开头定义的任何简单 "Conversation Objects" 或 "yesOrNoAnswer" 节点,允许嵌套我想要多少级别。如何在 XSD 中定义整个 "yesOrNoAnswer" 节点(包括属性、文本、"yes" 和 "no" 节点)?提前致谢!
XSD 1.0
此 XSD 将代表您描述的约束并验证您的 XML:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="ConversationObjectGroup">
<xs:choice>
<xs:element name="Message"/>
<xs:element name="End"/>
<xs:element name="Effect"/>
</xs:choice>
</xs:group>
<xs:element name="yesOrNoAnswer" type="YesOrNoAnswerType"/>
<xs:complexType name="YesOrNoAnswerType" mixed="true">
<xs:sequence>
<xs:element name="yes" type="yesOrNoType"/>
<xs:element name="no" type="yesOrNoType"/>
</xs:sequence>
<xs:attribute name="actor"/>
<xs:attribute name="bar"/>
<xs:attribute name="points"/>
<xs:attribute name="percentage"/>
</xs:complexType>
<xs:complexType name="yesOrNoType" mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="ConversationObjectGroup"/>
<xs:element ref="yesOrNoAnswer"/>
</xs:choice>
</xs:complexType>
</xs:schema>