【问题标题】:Regarding XML schema, Unable to find correct behaviour of XML document关于 XML 模式,无法找到 XML 文档的正确行为
【发布时间】:2015-06-11 17:46:01
【问题描述】:

我是 XML 模式的新手,我正在尝试了解它们是如何工作的。我写了一个简单的架构。下面是我的 xml 架构。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="employees" type="comType"/>
    <xs:complexType name="comType">
        <xs:sequence>
            <xs:element ref="employee" maxOccurs="2"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="employee">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
                <xs:element name="address" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:integer" use="required"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

但是我有点困惑什么 XML 对这个架构有效。当我使用 notpad++ 验证下面的两个 XML 时,下面的两个 XML 都没有给出错误,因为我期望带有员工根元素的 XML 应该正确的。

<?xml version="1.0" encoding="UTF-8"?>
<employees>
    <employee id="1">
        <name>xxxx</name>
        <address>xxx</address>
    </employee>
    <employee id="2">
        <name>yyyyy</name>
    <address>yyy</address>
    </employee>
</employees>    

第二个 XML 是

<?xml version="1.0" encoding="UTF-8"?>

<employee id="1">
    <name>Deepak</name>
    <address>909</address>
</employee>

架构是

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
<xs:element name="employees" type="comType"/>   
<xs:complexType name="comType">
<xs:sequence>
<xs:element ref="employee" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>

<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>

需要帮助...

【问题讨论】:

  • 请看你问题的源代码;我对其进行了编辑,因此您的架构代码实际上是可见的。
  • 添加到我原来的帖子中

标签: xml xsd


【解决方案1】:

两个 Xml 实例都是正确的,就像在 Xml Schema 中一样,任何全局定义的 &lt;element&gt; 都可以作为根元素。 answers to this other question 中也对此进行了讨论。

由于您已经在架构的根级别使用&lt;xsd:element&gt; 元素定义了employeesemployee(即直接嵌套在&lt;xsd:schema&gt; 元素中),因此它们中的任何一个都可以用作您的架构的 Xml 实例文档。

为了防止employee 成为根元素,您可以完全内联employee 元素的定义而不是使用&lt;xs:element ref="employee" maxOccurs="2"/&gt;,或者您可以将内容命名为employee 元素并在架构根级别定义 complexType,这样您就可以得到一个可重用的复杂类型,然后您可以将其指示为 employee 元素的类型。

【讨论】:

  • 谢谢。解决了问题。修改了我的架构
猜你喜欢
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2013-11-23
  • 2014-08-26
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多