我有一个xsd,它包含以下内容:
<xs:complexType name="MyDataType">
<xs:simpleContent>
<xs:extension base="xs:boolean">
<xs:attribute name="id" type="xs:int" fixed="9999" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="MessageType">
<xs:all>
<xs:element name="Data" type="MyDataType"/>
</xs:all>
</xs:complexType>
所以这个片段是有效的:
<Message>
<Data>true</Data>
</Message>
其中,Message被定义为MessageType类型。但我想做的是让客户端能够省略数据元素:
<Message></Message>
(或等效的自闭元件)
从语义上讲,有点像:
<xs:complexType name="MyDataType">
<xs:simpleContent>
<xs:extension base="xs:boolean" default="true">
<xs:attribute name="id" type="xs:int" fixed="9999" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
将默认值添加到扩展名中。但不起作用。。。。
你无法实现你想要的。
更重要的是,假设您将default="true"移动到Data元素声明中,并使Data可选(通过添加minOccurs="0")。。。它对元素和属性的工作方式是不同的。。。引用初级读本中的话:"当属性缺失时,默认属性值适用,当元素为空时,默认元素值适用。"
因此,最接近的可能是允许<Message><Data/></Message>
,在这种情况下,默认值"true"将通过PSVI可用。