2010-04-06 21 views
8

que tienen un documento XML como:¿Describe la repetición de nodos XML en W3C XML Schema?

<Root> 
    <Bravo /> 
    <Alpha /> 
    <Charlie /> 
    <Charlie /> 
    <Delta /> 
    <Foxtrot /> 
    <Charlie /> 
</Root> 

El orden de los nodos no importa. Cada nodo puede aparecer cero o una vez, a excepción de Charlie. Charlie puede aparecer cero, uno o arbitrariamente muchas veces. La forma más sencilla de expresar esto en XSD es:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Root"> 
     <xsd:complexType> 
      <xsd:all> 
       <xsd:element name="Alpha" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Bravo" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Charlie" minOccurs="0" maxOccurs="unbounded" /> 
       <xsd:element name="Delta" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Echo" minOccurs="0" maxOccurs="1" /> 
       <xsd:element name="Foxtrot" minOccurs="0" maxOccurs="1" /> 
      </xsd:all> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

Pero esto no funciona, porque xsd: todo no permite la maxOcurrencias superior a 1. Ya que no puedo usar xsd: todo, lo que se debe usar?

+0

Mi pregunta es muy similar a la versión editada de "XSD: ¿cómo permitir elementos en cualquier orden varias veces?". Nadie fue capaz de proporcionar una respuesta XSD para eso. – NotMyName

Respuesta

2

Schematron. :)

No estoy 100% seguro, pero creo que este modelo no se puede expresar en XML Schema.

+0

Es posible expresar esto en XSD 1.0, pero incómodo: en esencia, tiene que calcular todas las órdenes posibles para los elementos, y luego factorizar a la izquierda la expresión regular para evitar problemas con las reglas de determinismo. En XSD 1.1 las restricciones en todos los grupos son algo relajadas; en particular 'maxOccurs' ya no necesita ser 1. –

1

Puede usar xsd: sequence, pero el orden sería importante que haya indicado en la pregunta no se garantizará.

En cuanto a: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#element-group parece que no hay un grupo de modelos que puede utilizar, aunque tal vez podría simplemente definirlos en el complexType sin utilizar un grupo de contenido?

+0

Tiene que haber un indicador: secuencia, opción, todo. Sin embargo, ninguno de estos por sí solo coincide con lo que necesito. – NotMyName

Cuestiones relacionadas