在XSD架构中定义复杂类型的默认值



我有一个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可用。

最新更新