Pregunta

Estoy intentando representar el siguiente fragmento DTD en XSD: -

(A | b)* | (A | c)* | (A | d)* | ...

es decir.una lista mixta de cualquier número de As y cualquier número de uno de B, C, D,...

CastorConverter escupe: -

              <choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:B" />
                    </choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:C" />
                    </choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:D" />
                    </choice>
              </choice>

pero esto me da un error del analizador.Al investigar con Visual Studio aparece la siguiente advertencia: -

"La definición múltiple del elemento 'A' hace que el modelo de contenido se vuelva ambiguo.Se debe formar un modelo de contenido de modo que durante la validación de una secuencia de elementos de información de elementos, la partícula contenida directa, indirecta o implícitamente en ella con la que intentar validar cada elemento en la secuencia pueda determinarse de forma única sin examinar el contenido o los atributos de ese elemento, y sin ninguna información sobre los elementos en el resto de la secuencia."

El problema parece ser que si el analizador encuentra una "A", necesitará "mirar hacia adelante" al resto de la secuencia para determinar contra qué opción validar.

¿Existe otra forma de representar esta secuencia en XSD?

¿Fue útil?

Solución

Use secuencias, como este:

<sequence minOccurs="0">
  <element minOccurs="0" maxOccurs="unbounded" ref="tns:A" />
  <choice>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:B" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:B" />
      </sequence>
    </sequence>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:C" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:C" />
      </sequence>
    </sequence>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:D" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:D" />
      </sequence>
    </sequence>
  </choice>
</sequence>

texto alternativo http://www.freeimagehosting.net/uploads/29c07bafa2.png

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top