【问题标题】:Defining default value for complex type in XSD schema在 XSD 模式中定义复杂类型的默认值
【发布时间】:2013-11-25 16:33:48
【问题描述】:

我有一个包含以下内容的 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 类型。但我想做的是让客户能够省略 Data 元素:

<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>

默认添加到扩展。还是不行....

【问题讨论】:

标签: xml xsd


【解决方案1】:

你无法实现你想要的。

更是如此,假设您将 default="true" 移动到 Data 元素声明中,并使 Data 成为可选(通过添加 minOccurs="0")......它对元素和属性的工作方式之间存在差异。 .. 引用Primer“属性缺失时应用默认属性值,元素为空时应用默认元素值。”

因此,您可能得到的最接近的是允许&lt;Message&gt;&lt;Data/&gt;&lt;/Message&gt;,在这种情况下,“true”的默认值可通过 PSVI 获得。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多