我正在尝试将一本小书翻译成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>
答案 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文档,并且如果有多个文件是好的则不清楚。因此,我建议您在架构中使用一个根元素。