2010-04-06 6 views
8

Ich habe ein XML-Dokument wie:Beschreiben Sie wiederkehrende XML-Knoten im W3C-XML-Schema?

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

Die Reihenfolge der Knoten keine Rolle spielt. Jeder Knoten kann null oder ein Mal erscheinen, außer für Charlie. Charlie erscheint oft null, eins oder beliebig oft. Die einfache Möglichkeit, dies in XSD auszudrücken ist:

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

Aber das funktioniert nicht, weil xsd: alle nicht für maxOccurs erlauben größer als 1. Da ich nicht XSD verwenden kann: alles, was soll ich verwenden?

+0

Meine Frage ist sehr ähnlich zu der bearbeiteten Version von "XSD - wie Elemente in beliebiger Reihenfolge beliebig oft zulassen?". Niemand konnte dafür eine XSD-Antwort liefern. – NotMyName

Antwort

2

Schematron. :)

Ich bin nicht 100% sicher, aber ich denke, dass dieses Modell nicht in XML-Schema ausgedrückt werden kann.

+0

Es ist möglich, dies in XSD 1.0 auszudrücken, aber peinlich: Im Wesentlichen müssen Sie alle möglichen Ordnungen für die Elemente berechnen und dann den regulären Ausdruck links-factorieren, um Probleme mit den Determinismusregeln zu vermeiden. In XSD 1.1 sind die Einschränkungen für alle Gruppen etwas gelockert. insbesondere muss "maxOccurs" nicht mehr 1 sein. –

1

Sie könnten xsd: sequence verwenden, aber dann wäre die Reihenfolge wichtig, die Sie in der Frage angegeben haben, wird nicht garantiert.

Mit Blick auf: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#element-group Es scheint, dass es keine Modellgruppe gibt, die Sie verwenden können, obwohl Sie sie vielleicht nur im complexType definieren könnten, ohne eine Inhaltsgruppe zu verwenden?

+0

Es muss ein Indikator sein: Reihenfolge, Auswahl, alle. Aber keines von denen allein entspricht dem, was ich brauche. – NotMyName