2017-02-13 53 views
2

我想寫模式這驗證我的下面的XML想寫架構XML文件

<labtest> 
    <labtest_id1>10190</labtest_id1> 
    <labtest_id2> 10200</labtest_id2> 
    <labtest_id3> 10220</labtest_id3> 
</labtest> 

標籤<labtest_id>的數量可以增加或減少。我驗證喜歡這一點,但它不工作

<xs:element name="labtest" minOccurs="1" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="labtest_id" minOccurs="1" type="xs:decimal"/> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
+0

可能重複[此問題](http://stackoverflow.com/questions/943659/how-can-i-define-an-xsd-file-that-allows-unknown-wildcard-elements) –

+0

永遠不要告訴我們什麼是「不工作」。告訴我們它是如何失敗的。 –

+0

它說因爲labtest_id 2不存在而失敗。所以我想跳過labtest的檢查 – amanda

回答

2

更改XML設計邁克爾·凱建議,仍然支持多種labtest元素以及多種labtest_id元素:

此XML,

<?xml version="1.0" encoding="UTF-8"?> 
<labtests> 
    <labtest> 
    <labtest_id>10190</labtest_id> 
    <labtest_id>10200</labtest_id> 
    <labtest_id>10220</labtest_id> 
    </labtest> 
    <labtest> 
    <labtest_id>12345</labtest_id> 
    </labtest> 
</labtests> 

將成功地驗證對這一XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="labtests"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="labtest" minOccurs="1" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="labtest_id" minOccurs="1" 
          maxOccurs="unbounded" type="xs:decimal"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

備註:

  • 你想labtest重複,但只能在良好的XML是一個根元素 ,所以加一個labtests包裝元素。
  • 你想labtest_id重複,所以加一個maxOccurs="unbounded"到 其聲明。
3

如果要強加LABTEST的所有孩子必須命名爲labtest_N其中N是一個整數的約束,這東西你不能XSD做(除也許使用XSD 1.1和斷言)。

這是使用XML一個可怕的方式,而要做到的最好的事情是第一次使用XSLT把它轉換爲理智的東西,例如:

<labtests> 
    <labtest id='1'>10190</labtest> 
    <labtest id='2'>10200</labtest> 
    <labtest id='3'>10220</labtest> 
</labtests> 

,然後驗證與XSD的結果。

+0

但labtest標籤的數量是不知道的可能會增加,所以這不是解決方案@micheal kay – amanda

+0

@Micheal我怎麼能跳過使用跳過檢查labtest? – amanda

+0

正是因爲labtest標籤的數量未知,您最好使用不同的結構。 XSD旨在使用固定的有限標籤名稱詞彙來驗證文檔。 –