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

时间:2013-11-25 16:33:49

标签: xml 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>

默认添加到扩展程序。虽然不起作用......

1 个答案:

答案 0 :(得分:0)

你无法实现自己想要的目标。

更重要的是,假设您将default =“true”移动到Data元素声明,并使Data可选(通过添加minOccurs =“0”)......元素和属性的工作方式之间存在差异。 ..引用来自Primer“默认属性值适用于缺少属性时,默认元素值适用于元素为空时。”

所以最接近的是允许<Message><Data/></Message>,在这种情况下,默认值“true”可通过PSVI获得。