我有一个包含以下内容的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>
默认添加到扩展程序。虽然不起作用......
答案 0 :(得分:0)
你无法实现自己想要的目标。
更重要的是,假设您将default =“true”移动到Data元素声明,并使Data可选(通过添加minOccurs =“0”)......元素和属性的工作方式之间存在差异。 ..引用来自Primer:“默认属性值适用于缺少属性时,默认元素值适用于元素为空时。”
所以最接近的是允许<Message><Data/></Message>
,在这种情况下,默认值“true”可通过PSVI获得。