2011-11-29 75 views
5

鑑於此XML文件:XML模式在NMTOKENS屬性列表,以驗證每個值

<users blessed="phrogz alians"> 
    <user name="phrogz" id="42" /> 
    <user name="lachtok" id="3" /> 
    <user name="vielee" id="5" /> 
    <user name="alians" id="17" /> 
</users> 

...它可以創建一個XSD,確保key/keyref風格的驗證,在該blessed每個值列表匹配與現有user/@name

如果這對於XSD不可行,是否可以使用RelaxNG?

+0

同樣,有沒有辦法強制唯一性,即防止'祝福=「phrogz phrogz phrogz」'? :) – Phrogz

+0

在Relax NG語法中不可行,但可以使用嵌入式schematron規則完成。 –

回答

5

不,這不適用於XSD 1.0。這是直截了當的XSD 1.1,當然,使用斷言:

唯一性(如果在用戶元件的所述電平所定義的):

<xsl:assert test="count(@blessed) = count(distinct-values(@blessed))"/> 

參照完整性(如果在用戶元件的所述電平所定義的):

<xsl:assert test="every $t in data(@blessed) satisfies $t = user/@name"/> 
+0

感謝您的專業和幫助。我真的很榮幸能成爲幫助我的人。 :) – Phrogz