在 XSD 中最多无法获取集合的子元素一次
Cant get child elements of a set atmost once in XSD
我有以下架构-
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Type">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="First">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="5">
<xsd:element name="a" type="xsd:decimal" minOccurs="0" maxOccurs="1"/>
<xsd:element name="b" type="xsd:int" minOccurs="0" maxOccurs="1"/>
<xsd:element name="c" type="xsd:int" minOccurs="0" maxOccurs="1"/>
<xsd:element name="d" type="xsd:int" minOccurs="0" maxOccurs="1"/>
<xsd:element name="e" type="xsd:int" minOccurs="0" maxOccurs="1"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="Second" type="xsd:base64Binary"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
我要生成的模式是 XML 可以包含任意次数和任意顺序的第一个和第二个元素,但元素“第一个”的子元素最多出现一次。即 a,b,c,d,e 最多出现一次。我无法实现子元素最多出现一次的第二部分。有什么想法吗?
而不是 xsd:choice
,使用允许元素以任意顺序出现的 xsd:all
。每个子元素下面的出现面可以出现一次或根本不出现。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Type">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="First">
<xsd:complexType>
<xsd:all maxOccurs="1">
<xsd:element name="a" type="xsd:decimal" minOccurs="0" />
<xsd:element name="b" type="xsd:int" minOccurs="0"/>
<xsd:element name="c" type="xsd:int" minOccurs="0"/>
<xsd:element name="d" type="xsd:int" minOccurs="0"/>
<xsd:element name="e" type="xsd:int" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="Second" type="xsd:base64Binary"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
正在根据此架构验证文档,如
<?xml version="1.0" encoding="UTF-8"?>
<Type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Untitled7.xsd">
<First>
<b>10</b>
<a>10.0</a>
<c>3</c>
<d>4</d>
<e>5</e>
</First>
<Second></Second>
</Type>
有效,而以下则无效:
<?xml version="1.0" encoding="UTF-8"?>
<Type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Untitled7.xsd">
<First>
<b>10</b>
<a>10.0</a>
<c>3</c>
<d>4</d>
<e>5</e>
<a>10.0</a>
</First>
<Second></Second>
</Type>
因为 a
在同一个 First
元素中出现了两次。
我有以下架构-
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Type">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="First">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="5">
<xsd:element name="a" type="xsd:decimal" minOccurs="0" maxOccurs="1"/>
<xsd:element name="b" type="xsd:int" minOccurs="0" maxOccurs="1"/>
<xsd:element name="c" type="xsd:int" minOccurs="0" maxOccurs="1"/>
<xsd:element name="d" type="xsd:int" minOccurs="0" maxOccurs="1"/>
<xsd:element name="e" type="xsd:int" minOccurs="0" maxOccurs="1"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="Second" type="xsd:base64Binary"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
我要生成的模式是 XML 可以包含任意次数和任意顺序的第一个和第二个元素,但元素“第一个”的子元素最多出现一次。即 a,b,c,d,e 最多出现一次。我无法实现子元素最多出现一次的第二部分。有什么想法吗?
而不是 xsd:choice
,使用允许元素以任意顺序出现的 xsd:all
。每个子元素下面的出现面可以出现一次或根本不出现。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Type">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="First">
<xsd:complexType>
<xsd:all maxOccurs="1">
<xsd:element name="a" type="xsd:decimal" minOccurs="0" />
<xsd:element name="b" type="xsd:int" minOccurs="0"/>
<xsd:element name="c" type="xsd:int" minOccurs="0"/>
<xsd:element name="d" type="xsd:int" minOccurs="0"/>
<xsd:element name="e" type="xsd:int" minOccurs="0"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="Second" type="xsd:base64Binary"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
正在根据此架构验证文档,如
<?xml version="1.0" encoding="UTF-8"?>
<Type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Untitled7.xsd">
<First>
<b>10</b>
<a>10.0</a>
<c>3</c>
<d>4</d>
<e>5</e>
</First>
<Second></Second>
</Type>
有效,而以下则无效:
<?xml version="1.0" encoding="UTF-8"?>
<Type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Untitled7.xsd">
<First>
<b>10</b>
<a>10.0</a>
<c>3</c>
<d>4</d>
<e>5</e>
<a>10.0</a>
</First>
<Second></Second>
</Type>
因为 a
在同一个 First
元素中出现了两次。