Question

Je suis en train de représenter le fragment DTD suivant dans XSD: -

(A | B) * | (A | C) * | (A | D) * | ...

i.e.. une liste mixte d'un nombre quelconque de As et un nombre quelconque de une de B, C, D, ...

CastorConverter recrache: -

              <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>

mais cela me donne une erreur d'analyse. Enquête avec le studio visuel évoque l'avertissement suivant: -

«définition multiple d'un élément « A » provoque le modèle de contenu pour devenir ambiguë. Un modèle de contenu doit être formé de telle sorte que lors de la validation d'une séquence d'information d'élément de l'élément, la particule contenue dans celle-ci directement, indirectement ou implicitement avec lequel pour tenter de valider chaque élément de la séquence à son tour, peut être déterminée de façon unique, sans examiner le contenu ou des attributs de cet élément, et sans aucune information sur les éléments dans le reste de la séquence. "

Le problème semble être que si l'analyseur rencontre un « A » devra « look-ahead » pour le reste de la séquence afin de déterminer quel choix pour valider contre.

Y at-il une autre façon que je peux représenter cette séquence dans XSD?

Était-ce utile?

La solution

utiliser des séquences, comme ceci:

<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>

texte alt http://www.freeimagehosting.net/uploads/29c07bafa2.png

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top