如何为一本书设计XML Schema?

时间:2014-07-10 01:39:09

标签: xml xsd

我正在尝试将一本小书翻译成XML文档。这本书有以下结构,

Title

Acknowledgement

Copyright

Collaborating Members

Publishers name and address 

Table of contents

Preface

Chapter (optional) and under chapter there are sections (must)

我正在尝试在两个选项中做出决定:我是否可以使用一个主要标记设计模式文档,并使用严格的顺序在其中定义所有内容,例如,

<xsd:element name="theBook">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="bookTitle" type="xsd:string"/>
   <xsd:element name="bookAck" type="xsd:string"/> 
    <!-- and so on -->
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

或者我可以单独定义它们吗?如,

<xsd:element name="theBook">
</xsd:element>
<xsd:element name="bookTitle" type="xsd:string">
</xsd:element>

2 个答案:

答案 0 :(得分:1)

There are a number of different patterns available for designing XML schema,各有各的利弊。

但是,关于你的问题:“我应该有多个定义的顶级元素还是只有一个?”:

任何顶级元素(被定义为xs:schema元素的直接子元素)都可以用作文档中的根级元素。所以使用你的第二个例子:

<xs:schema>
  <xsd:element name="theBook">
  </xsd:element>
  <xsd:element name="bookTitle" type="xsd:string">
  </xsd:element>
</xs:schema>

我可以有两个不同的文档,一个以book作为根,另一个以bookTitle作为根。显然,bookTitle不能真正成为根元素,这限制了您的选择。但其他时候则不太明显。

例如,您可以改为:

<xs:schema>
  <xsd:element name="theBook">
  </xsd:element>
  <xsd:element name="chapter">
  </xsd:element>
</xs:schema>

此处,每个chapter可以是自己的XML文档,然后book可以对每个chapters都有一个URI引用,这可能很有用。

至于哪一个最好 - 这是一个架构决定,由你决定。

答案 1 :(得分:-1)

我建议您的架构仅定义one root element,以便解析器可以将其解析为文档。 符合架构的xml文档如下所示:

<theBook>
  <bookTitle>title</bookTitle>
  <bookAck>ack</bookAck>
  ...
</theBook>

您可能正在考虑在文档中包含多个根元素。 This is not a good idea

备选方案并让您的书仍然是一个可以解析的xml文档,它将包含多个xml文档,每个文档都使用您的模式进行验证,但这些文档是您图书的片段(可能是章节)。

如果图书非常大或者您希望多个人同时更新单个段落,那么您需要片段,但您最初在问题中说明您想要一个xml文档,并且如果有多个文件是好的则不清楚。因此,我建议您在架构中使用一个根元素。