0

<body>我有一个场景,其中有一个孩子<a>,然后是顺序限制<b>

 <body>
   <a />
   <b />
 </body 

但是,<a>并且<b>是一个组的一部分,所以我的 XSD 就像

 <xs:element name="body">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:group where <a> defined />
          <xs:group where <b> defined />
        </xs:sequence>

我收到以下数据,<b>然后<a>

 <body>
   <b />
   <a />
  </body 

并且数据正在成功验证,而我预计它会失败,因为它不遵守序列。是否像验证器无法识别<xs:sequence>. 请建议??

此外,当我将它们定义为 a 中的一个元素时<xs:sequence>,数据对 Schema 失败,但是当这些元素在组中并且这些组在<xs:sequence>.

4

1 回答 1

0

我刚刚尝试过,它似乎按您的预期工作

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="test" xmlns:test="test">

<xs:group name="a_group">
    <xs:sequence>
        <xs:element name="a" type="xs:string" />
    </xs:sequence>
</xs:group>

<xs:group name="b_group">
    <xs:sequence>
        <xs:element name="b" type="xs:string" />
    </xs:sequence>
</xs:group>

<xs:element name="body">
    <xs:complexType>
        <xs:choice maxOccurs="unbounded">
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
                <xs:group ref="test:a_group" />
                <xs:group ref="test:b_group" />
            </xs:sequence>
        </xs:choice>                
    </xs:complexType>
</xs:element>

</xs:schema>

以下xml将验证

<?xml version="1.0" encoding="UTF-8"?>
<body xsi:schemaLocation="test test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="test">
    <a />
    <b />
</body>

跟随不会

<?xml version="1.0" encoding="UTF-8"?>
<body xsi:schemaLocation="test test.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="test">
    <b />
    <a />
</body>

我在 Altova 中对其进行了测试。你用什么来验证?我对一些Java应用程序有一些奇怪的经验:当我choice跟随sequence(它们之间没有元素)时,它的工作方式就像只choice声明了(即在<a />和之间选择<b />。(类似地sequence包含choice只工作sequence。)所以如果它是类似的情况,有可能,这minOccurs="0"会导致麻烦。

于 2013-06-24T11:43:40.237 回答