我正在尝试提出一种模式,允许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>
会很棒但据我所知你不能这样做。我知道可以使用替换组来完成,但在我看来,我必须在每个我想要应用的类型上放置用于构建子组的详细代码。
对此的任何帮助将不胜感激。
答案 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>