2012-04-04 83 views
0

元素XSD語法這將是聲明的XML元素Cluster包含單個XML元素類型Node(1個或多個實例)的正確的方法:對於嵌套在另一個

<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>的更復雜的安排,在這種情況下,我懷疑這些安排是過度的。

+0

這就夠了!添加一個maxoccurs =無界。你可以在這裏找到一些有關XSD和列表的最佳實踐:http://www.xfront.com/ElementHierarchy.html – 2012-04-04 13:26:54

回答

1

其實,你的XSD充滿了各種各樣的問題。嘗試使用一個體面的XSD/XML編輯器,它應該比你想象的更多地幫助你。

問題:

  • 基數屬性(最小值/最大值時發生)並不適用於全局元素聲明。
  • 如果你引用一個類型,你應該在某個地方有一個簡單或複雜類型的定義。

我會用一個示例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推斷可能並不總是令人滿意...

+0

感謝您的建議。我將從現在開始使用XSD編輯器。 – Olumide 2012-04-04 14:09:24

+0

在這個例子中,因爲'nillable'默認爲false,所以片段''無效。 – Olumide 2012-04-04 14:35:03

+0

@Olumide,你是否希望允許空白內容,只需爲Node元素設置minOccurs = 0即可。 – 2012-04-04 14:41:13

0

我不會試圖添加到這個特定模式的討論。我只是說,即使在工具的幫助下,你也不應該試圖編寫任何類型的模式,除非你已經更詳細地研究了該語言。這是一個非常複雜的規範。不要試圖閱讀W3C規範;但是請閱讀關於這個主題的許多優秀書籍之一,例如Eric van der Vlist的書很平易近人。這不是一種可以通過反覆試驗學習的語言。

+0

我在寫我的模式時正在閱讀一本書(由Bill Evjen at。al。出版的專業XML,由Wiley出版)。 – Olumide 2012-04-04 16:25:06

+0

快速問題。請記住,的maxOccurs屬性的默認值爲1,不應該由多個元素組成的序列無效(如果maxOccurs屬性未設置爲較高值或未綁定)。 – Olumide 2012-04-04 16:38:18

相關問題