用于将元素嵌套在另一个元素中的XSD语法

时间:2012-04-04 13:23:50

标签: xml xsd

这是否是声明XML元素Cluster包含(1个或多个实例)单个XML元素类型Node的正确方法:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Cluster" type="Node" minOccurs=2>
    </xs:element>

    <xs:element name="Node"/>
    </xs:element>
</xs:schema>

我正在学习的教科书和我遇到的所有在线资源专门讨论涉及<xs:complex>的更复杂的安排,我怀疑这种安排在这种情况下是过度的。

2 个答案:

答案 0 :(得分:1)

实际上,你的XSD充满了各种各样的问题。尝试使用一个像样的XSD / XML编辑器,它应该比你想象的更多。

问题:

  • 基数属性(min / max Occurs)不适用于全局元素声明。
  • 如果你引用一个类型,你应该在某个地方有一个简单或复杂的类型定义。

我将从示例XML开始,因为您已经知道:

<Cluster>
    <Node>node1</Node>
    <Node>node2</Node>
</Cluster>

然后你可以使用这个不错的工具来生成XSD,这个主题比你刚刚可视化的简单XML更复杂:

<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Cluster">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" name="Node" type="xsd:string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

在那里你可以看到maxOccurs,然后将其更改为你想要的值。随着您越来越熟悉XSD语法,您可以开始将工作XSD编辑为更有意义的内容;最后,XSD的推论可能并不总是令人满意......

答案 1 :(得分:0)

我不会尝试添加有关此特定架构的讨论。我只想说,即使在工具的帮助下,你也不应该尝试编写任何类型的模式,直到你更详细地研究了这种语言。这是一个非常复杂的规范。不要试图阅读W3C规范;但是请阅读关于这个主题的许多好书中的一本,例如Eric van der Vlist的那本书非常平易近人。它不是一种可以通过反复试验来学习的语言。