2011-11-29 12 views
5

Dado este archivo XML:esquema XML para validar cada valor en una lista de atributos 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> 

... ¿es posible crear un XSD key/keyref validación estilo que asegura que cada valor de la del blessed lista coincide con un user/@name existente?

Si esto no es posible con XSD, ¿es posible con RelaxNG?

+0

De manera similar, ¿hay alguna manera de hacer cumplir la singularidad, es decir, evitar 'blessed =" phrogz phrogz phrogz "'? :) – Phrogz

+0

No es posible en la sintaxis de Relax NG, pero se puede hacer con reglas de schematron incrustadas. –

Respuesta

5

No, no es posible con XSD 1.0. Es sencillo en XSD 1.1, por supuesto, el uso de afirmaciones:

Singularidad (si está definida en el nivel del elemento de usuarios):

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

integridad referencial (si está definida en el nivel del elemento de usuarios):

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

Gracias por su experiencia y ayuda. Me siento sinceramente honrado de que haya sido usted quien me haya ayudado. :) – Phrogz

Cuestiones relacionadas