2011-11-29 17 views
5

इस एक्सएमएल फ़ाइल को देखते हुए:XML स्कीमा

<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 के खिलाफ सूची मैच?

यदि यह एक्सएसडी के साथ संभव नहीं है, तो क्या यह RelaxNG के साथ संभव है?

+0

इसी प्रकार, विशिष्टता को लागू करने का कोई तरीका है, यानी 'धन्य = "phrogz phrogz phrogz" '? :) – Phrogz

+0

आराम एनजी वाक्यविन्यास में संभव नहीं है, लेकिन एम्बेडेड schematron नियमों के साथ किया जा सकता है। –

उत्तर

5

नहीं, एक्सएसडी 1.0 के साथ यह संभव नहीं है। यह, XSD 1.1 में सीधा है, ज़ाहिर है, कथनों का उपयोग कर:

विशिष्टता (यदि उन तत्व के स्तर पर परिभाषित):

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

Referential अखंडता (यदि उन तत्व के स्तर पर परिभाषित):

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

आपकी विशेषज्ञता और सहायता के लिए धन्यवाद। मुझे आपकी मदद करने के लिए एक होने के लिए ईमानदारी से सम्मानित महसूस होता है। :) – Phrogz

संबंधित मुद्दे