2011-11-29 13 views
5

Dato questo file XML:XML Schema per convalidare ogni valore in una lista di attributi 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> 

... è possibile creare un XSD key/keyref convalida stile che assicura che ogni valore nel l'blessed elencare le partite con uno esistente user/@name?

Se ciò non è possibile con XSD, è possibile con RelaxNG?

+0

Analogamente, esiste un modo per rafforzare l'univocità, ovvero impedire 'blessed =" phrogz phrogz phrogz "'? :) – Phrogz

+0

Non possibile nella sintassi Relax NG, ma può essere eseguito con regole schematron incorporate. –

risposta

5

No, non è possibile con XSD 1.0. E 'semplice in XSD 1.1, naturalmente, utilizzando asserzioni:

unicità (se definito a livello dell'elemento utenti):

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

referenziale integrità (se definito a livello dell'elemento utenti):

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

Grazie per l'esperienza e l'aiuto. Mi sento onestamente onorato che tu sia stato l'unico ad aiutarmi. :) – Phrogz

Problemi correlati