我面临以下问题。我需要创建XML文件的XSD架构。让我们说我有几个"会话对象"节点:
这是我能够在我的XSD中描述的简单元素(或几乎)。例如,我的End节点以这种方式定义:
<xs:element name="END" type="EndType"/>
<xs:complexType name="EndType" />
<xs:attribute name="completedMission" type="xs:string"/>
<xs:attribute name="retry" type="xs:boolean"/>
</xs:complexType>
然后我有一个特别的叫做:
这种元素具有以下结构:
<multipleChoice actor="" numberOfChoices="" percentage=""> message text
<choice>
<effects name="" bar="" points="" action="" likelihood="" />
...
</choice>
<choice>
<effects name="" bar="" points="" action="" likelihood="" />
...
</choice>
<choice>
<effects name="" bar="" points="" action="" likelihood="" />
...
</choice>
</multipleChoice>
所以,第一个问题是:
如何定义&#34; multipleChoice&#34; XSD中的节点(包括属性,文本,&#34;选择&#34;和&#34;效果&#34;节点)?提前谢谢!
答案 0 :(得分:1)
这个答案怎么样 - 只适用于XSD 1.1! 根据@Tarta的反馈更新。
<xs:element name="multipleChoice">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="choice"/>
</xs:sequence>
<xs:attribute name="actor"/>
<xs:attribute name="numberOfChoices"/>
<xs:attribute name="percentage"/>
<xs:assert test="count(./choice) = @numberOfChoices"/>
</xs:complexType>
</xs:element>
<xs:element name="choice">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" ref="effects"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element minOccurs="0" maxOccurs="unbounded" ref="Message"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="End"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="YesOrNoAnswer"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="multipleChoice"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="effects">
<xs:complexType>
<xs:attribute name="name"/>
<xs:attribute name="bar"/>
<xs:attribute name="points"/>
<xs:attribute name="action"/>
<xs:attribute name="likelihood"/>
</xs:complexType>
</xs:element>
<xs:element name="Message">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
<xs:element name="End">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
<xs:element name="YesOrNoAnswer">
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
这应该为每个multipleChoice提供正确数量的选择元素,使用assert来强制执行。 它还允许嵌套元素。
此版本现在以1个效果元素开始,然后以任意顺序开始0或更多其他元素。