旧版未知值的xsd架构选择

时间:2012-07-18 08:03:00

标签: xml xsd schema choice

我正在尝试提出一种模式,允许xml指定元素因遗留原因而未知,而不仅仅是使元素不是必需的。

例如:

<personName>John</personName>

有效,但

<personName></personName>

无效但

<personName><legacyUnknown /></personName>

有效。

无论元素personName的复杂性如何,这都应该有效。有时它可能是一个带字符串限制的simpletype,有时它可能是一个复杂的元素。

<choice>
    <element name="personName" type="name" />
    <element name="personName" type="legacyUnknown" />
</choice>
<simpleType name="name">
<restriction base="string">
...enum values
</restriction>
</simpleType>

会很棒但据我所知你不能这样做。我知道可以使用替换组来完成,但在我看来,我必须在每个我想要应用的类型上放置用于构建子组的详细代码。

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以决定将“遗留未知”语义附加到其他相当无用的xsi:nil构造中。然后,您将架构中的元素定义为nillable,并使用xsi:nil =“true”标记实例,以捕获您想要“遗留未知”的含义。

答案 1 :(得分:0)

如果应根据文档的上下文应用限制(如客户端请求与服务器响应),则可以考虑以下事项:

 <xs:element name="request">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="personName" type="PersonName"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:element name="response">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" name="personName" type="PersonName"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:simpleType name="PersonName">
    <xs:restriction base="xs:string">
        <xs:minLength value="1"/>
    </xs:restriction>
</xs:simpleType>