XSD全部加上任何没有序列的

时间:2018-01-15 07:20:20

标签: xml validation xsd

我有一个复杂的元素:

<mytype>
    <key1>required</key1>
    <key2>optional</key2>
    <anyotherkey>whatever type value</anyotherkey>
</mytype>

基本上,我有一个带有必需键(key1),可选键(key2)和其他键的元素,我不在乎。如何编写有效的xsd?

<xs:all>只能验证(key1 + key2),但不能验证“anyotherkey”,因为“anyotherkey”的名称可以是任何名称。
<xs:any> <xs:sequence>中的<mytype> <key3>key3 value</key3> <key1>key1 value</key1> <key2>key2 value</key2> </mytype> 看起来很有希望,但问题是“任何其他键”可以按任何顺序排列。我不想要一个特定的序列。对于下面的例子,它仍然是一个有效的数据:

df.columns.str.startswith

1 个答案:

答案 0 :(得分:0)

xs:any内无xs:all。此外,如果要将xs:anyxs:element放在一起,则必须为 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://ns-main"> <xs:complexType name="register"> <xs:choice maxOccurs="unbounded"> <xs:element name="key1" type="xs:string"/> <xs:element name="key2" type="xs:string" minOccurs="0"/> <xs:any namespace="http://ns-opt" processContents="lax"/> </xs:choice> </xs:complexType> </xs:schema> 选择一个(不同的)命名空间。

在我看来,最实用的方法是使用限制较少的XML Schema并在解析后添加进一步的健全性检查(例如,Java,Schematron,...):

processContents='lax'

请注意,您可能希望xs:anyxs:any,否则XML解析器必须在运行时知道<main:test xmlns:main="http://ns-main" xmlns:opt="http://ns-opt"> <main:key2>test</main:key2> <opt:key3>test</opt:key3> <main:key1>test</main:key1> </main:test> 的所有元素的架构定义。

允许你这样的实例(假设main:test的类型为main:register)。

<xs:complexType name="register">
    <xs:sequence>
        <xs:any namespace="##any" processContents="lax" maxOccurs="unbounded"/>
    </xs:sequence> 
</xs:complexType>

如果您无法更改数据的命名空间,我担心没有其他XML架构

{{1}}