2016-08-04 35 views
0

我對xsd很新穎。我也在Q & A上發現了很多問題,但無法解決我的問題。我有一個html文件,我想使用xsd驗證進行驗證。我正在使用的標準是http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_Suppl_MRRT.pdf。它說html文件格式化的方式,應該可以使用任何xml驗證器來驗證它。注意這個問題XSD for same tag different attribute names,有點接近,但不是我想要的。這是我想驗證使用xsd多次驗證同一個字段具有不同的屬性

<!DOCTYPE html> 
<html> 
<head> 
    <tittle>Hello World</title> 
    <meta charset="UTF-8"/> 
    <meta name="d1" content="c1"/> 
    <meta name="d2" content="c2"/> 
</head> 
</html> 

的HTML的部分標準稱必須正好1屬性字符集的meta標籤,以及零個或多個帶屬性的名稱和內容。所以我試圖製作下面的xsd文件。

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="html"> 
     <xs:complextType> 
      <xs:sequence> 
       <xs:element name="title" type="xs:string"/> 
       <xs:element name="meta"> 
        <xs:complexType> 
         <xs:attribute name="charset" type="xs:string"/> 
        </xs:complexType> 
       </xs:element> 
       <!-- obviously this wouldn't work --> 
       <xs:element name="meta" minOccurs="0" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:attribute name="name" type="xs:string"/> 
         <xs:attribute name="content" type="xs:string"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

很顯然,上述模式由於元素元素的重複而不起作用。我收到一個多重元素錯誤。所以我試圖在下面的組元素中說唱其他元標籤,但即使這樣也行不通。

<xs:group name="otherMetatags"> 
     <xs:element name="meta" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:attribute name="name" type="xs:string"/> 
       <xs:attribute name="content" type="xs:string"/> 
      </xs:complexType> 
     </xs:element> 
    </xs:group> 
</xs:schema> 

我知道我的兩個方法似乎是愚蠢的,但就像我前面說的,是新的XSD。

回答

0

在XSD 1.0中,您無法表達一個meta屬性序列中只有一個必須具有charset屬性的限制。

在XSD 1.1中,您可以使用斷言來執行此操作。一個例子見XSD: Restrict only one child element to have specific value

+0

您給出的問題所面臨的例子有很大的差異。首先,我嘗試限制一個元素具有特定的值,但試圖限制1個元素具有特定的屬性,並且不應該包含其他元素的屬性 – ivange94

+0

這一點並不是爲您提供完全匹配,而是爲了告訴你實現你的目標的方式。在我們任何一方投入更多時間在基於斷言的解決方案之前,請檢查您的驗證工具是否支持XSD 1.1 - 許多不支持。此外,請[**接受**](http://meta.stackoverflow.com/q/5234/234215)對先前問題的一些答案。謝謝。 – kjhughes

+0

感謝您的幫助。我使用標準的java驗證api來做我的驗證(特別是java8)。關於這些問題,那裏的答案並沒有真正解決我的問題,也沒有解決好問題。我雖然接受了1。它接近我最終做的。 – ivange94

相關問題