我有以下 XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<props>
<id>someId</id>
<file_size>
<size>123</size>
<unit>MB</unit>
</file_size>
<file_size>
<size>123</size>
<unit>MB</unit>
</file_size>
</props>
以及相应的XSD:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="props">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="id" />
<xs:element name="file_size" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="size" />
<xs:element type="xs:string" name="unit" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
我的目标是允许无序元素,我看到ALL指标solution http://www.w3schools.com/schema/schema_complex_indicators.asp
但是,我如何保持 file_size 行为?我找到了一些解决方案:
<file_size>
<size>123</size>
<size>125</size>
<unit>MB</unit>
<unit>TB</unit>
</file_size>
但我需要有几个文件大小(与一个size和一个unit).
继续来说,props 的所有子项都可以按任意顺序排列,但具有任意数量的 file_size 元素。
我该如何处理这个问题?
这对于 XML Schema 1.0 来说是一个相当尴尬的要求。可以很容易地执行以下任一操作
- 正好各有一个
id
and file_size
,以任一顺序(使用all
)
<xs:all>
<xs:element type="xs:string" name="id" />
<xs:element name="file_size">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="size" />
<xs:element type="xs:string" name="unit" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
- 任意数量的
id
以及任意数量的file_size
元素,以任何顺序(使用重复choice
)
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element type="xs:string" name="id" />
<xs:element name="file_size">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="size" />
<xs:element type="xs:string" name="unit" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
但为了满足您任意数量的特定要求file_size
元素但是正好一个 id
是比较笨拙的。我能想到的最清晰的方法就是移动file_size
定义到顶层,然后ref
在两个可能的地方出现零次或多次:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:element name="file_size">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:int" name="size" />
<xs:element type="xs:string" name="unit" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="props">
<xs:complexType>
<xs:sequence>
<xs:element ref="file_size" minOccurs="0" maxOccurs="unbounded" />
<xs:element type="xs:string" name="id" />
<xs:element ref="file_size" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)