2012-07-11 110 views
1

的XML允許可變數目後跟數字Q的屬性,這樣如何將XSD屬性名稱定義爲正則表達式?

<recognitionPattern Q0="12.5" Q1="12.5" Q2="12.5" Q3="12.5" Q4="12.5" Q5="12.5" Q6="12.5" Q7="12.5"/> 

我目前的解決方案看起來是這樣的:

<xs:complexType name="PerQuarterDoubleHack"> <!-- YUCK! /> --> 
<xs:attribute name="Q0"     type="xs:double"  /> 
<xs:attribute name="Q1"     type="xs:double"  /> 
<xs:attribute name="Q2"     type="xs:double"  /> 
<xs:attribute name="Q3"     type="xs:double"  /> 
<xs:attribute name="Q4"     type="xs:double"  /> 
<xs:attribute name="Q5"     type="xs:double"  /> 
<xs:attribute name="Q6"     type="xs:double"  /> 
<xs:attribute name="Q7"     type="xs:double"  /> 
</xs:complexType> 

我見過很多的正則表達式的應用的值,但從來沒有一個屬性名稱。 我有更改XML嗎?

+0

http://stackoverflow.com/questions/832542/xsd-attribute-and-element-validation – sreehari 2012-07-11 16:45:31

回答

1

XML Schema不允許將任何驗證應用於屬性名稱,僅限於其。如果可能的話,最好的辦法是將XML更改爲以下內容:

<recognitionPattern> 
    <quarter id="0">12.55</quarter> <!-- equivalent to Q0 --> 
    <quarter id="1">12.55</quarter> <!-- equivalent to Q1 --> 
    <quarter id="2">12.55</quarter> <!-- equivalent to Q2 --> 
    <quarter id="3">12.55</quarter> <!-- equivalent to Q3 --> 
</recognitionPattern> 
+0

這是我的後備計劃.... – user1185461 2012-07-11 13:58:52

+0

您也可以使用自定義代碼驗證屬性名稱。例如,如果您正在使用Java,則可以設置一個自定義驗證處理程序,以便爲您的XML的每個元素調用。 – 2012-07-11 14:01:43

+0

屬性可以驗證。看到這個問題:http://stackoverflow.com/questions/832542/xsd-attribute-and-element-validation – sreehari 2012-07-11 16:44:47

0

這是一個非常糟糕的XML設計。通常,XML處理工具假定應用程序靜態地知道所有的元素和屬性名稱,如果不是這樣,編寫應用程序將很困難。如果有機會改變設計。