2009-09-22 62 views
3

我想創建一個xml架構(xsd)來驗證xmlfile。<any>在XSD中不起作用?

<a> 
    <b> 
     <c>...</c> 
     <d>...</d> 
    </b> 
    <b> 
     <c>...</c> 
     <e>...</e> 
      <d>...</d> 
    </b> 
<a> 

1個元素。 多個B元素,有一些內容。

我想驗證a存在於文件中,以及b的一個或多個出現。我不知道b裏面有什麼。

所以這是我的嘗試:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="a"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="b" minOccurs="1" maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="b"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:any minOccurs="1"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

我希望any - 元素會做的魔術,但事實並非如此。我究竟做錯了什麼?

編輯: XmlSpy給我這個錯誤:元素'c'沒有在DTD/Schema中定義。

回答

2

你不需要架構中的額外「B」,我想你要找的東西是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="a"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="b" minOccurs="1" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:any maxOccurs="unbounded" minOccurs="1" processContents="lax"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

這說明你有<a>爲根節點,它可以包含一個或多個<b> s

編輯:對不起,沒有閱讀完整的問題 - 嘗試以上!

第二編輯:上面的另一個嘗試!

+0

不幸的不是。 XmlSpy給了我這個錯誤:元素'c'沒有在DTD/Schema中定義。編輯後的 – Natrium 2009-09-22 08:53:26

+0

:仍然是同樣的錯誤:XmlSpy給我這個錯誤:元素'c'沒有在DTD/Schema中定義。 +1雖然努力。 – Natrium 2009-09-22 09:01:33

+0

很確定上面的工作現在:) – 2009-09-22 09:30:09

2

不像第一次出現那樣自由自在。默認情況下,我相信,元素的內容必須符合模式,只不過它們可以是來自該模式的任何

如果你想在該模式中不存在的元素,你需要將它定義爲這樣:

<xs:any minOccurs="1" processContents="lax"/> 

您可以使用「跳過」,而不是「寬鬆」,這甚至限制較少。

查看W3C spec瞭解更多信息。

+0

XmlSpy給我這個錯誤:元素'c'沒有在DTD/Schema中定義。兩者都有鬆懈和跳躍。 – Natrium 2009-09-22 09:05:33

+0

XmlSpy並不總是對的。這是越野車。 – skaffman 2009-09-22 09:17:10