1

我正在尝试提出一个架构,该架构允许 xml 指定由于遗留原因而未知的元素,而不仅仅是使元素成为非强制性的。

例如:

<personName>John</personName>

有效但

<personName></personName>

无效但

<personName><legacyUnknown /></personName>

已验证。

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

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

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

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

4

2 回答 2

1

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

于 2012-07-18T10:57:30.777 回答
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>
于 2012-07-18T21:17:07.280 回答