2016-10-15 1 views
1

Auf der Suche nach einem XML-Guru, um eine Anomly zu beantworten. Ich habe mehrere Webseiten mit wenig Glück überprüft.xml: Alle wollen alles oder nichts?

Ich habe einen komplexen Datentyp mit einem xs: alle darin minOccurs = 0 wie folgt gesetzt:

<xs:complexType name="EffectRecord"> 
     <xs:complexContent> 
      <xs:restriction base="xs:anyType"> 
       <xs:all minOccurs="0" maxOccurs="1"> 
        <xs:element name="P1Name" type="xs:string"/> 
        <xs:element name="P2Name" type="xs:string"/> 
        <xs:element name="P3Name" type="xs:string"/> 
        <xs:element name="BasedOnStat" type="xs:string"/> 
       </xs:all> 
       <xs:attribute name="EffectName" type="xs:string" use="required"/> 
       <xs:attribute name="Description" type="xs:string" use="required"/> 
       <xs:attribute name="CostFormula" type="xs:string" use="required"/> 
      </xs:restriction> 
     </xs:complexContent> 
    </xs:complexType> 

ich die Art verwenden später in meinem Schema wie folgt aus:

xs:element name="World"> 
    <xs:complexType> 
     <xs:all> 
      <xs:element name="Statistics"> 
       <xs:complexType> 
        <xs:sequence minOccurs="1" maxOccurs="unbounded"> 
         <xs:element name="Statistic" type="StatRecord"/> 
        </xs:sequence> 
       </xs:complexType> 
       <xs:key name="StatKey"> 
        <xs:selector xpath="World/Statistics"/> 
        <xs:field xpath="@Name"/> 
       </xs:key> 
       <xs:keyref refer="StatKey" name="StatRef"> 
        <xs:selector xpath="EffectRecord"/> 
        <xs:field xpath="BasedOnStat"/> 
       </xs:keyref> 
      </xs:element> 
      <xs:element name="Effects"> 
       <xs:complexType> 
        <xs:sequence maxOccurs="unbounded" minOccurs="0"> 
         <xs:element name="Effect" type="EffectRecord"/> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:all> 
    </xs:complexType> 
</xs:element> 

wenn ich versuche, ein Dokument mit diesem Schema in meinem Schema angetrieben XML-Editor zu schreiben, ist es mit diesem fein:

<?xml version="1.0" encoding="UTF-8"?> 

<Statistics> 
    <Statistic Name="Strength" Abbreviation="STR" Cost="3"/> 
    <Statistic Name="Toughness" Abbreviation="TOU" Cost="2"/> 
</Statistics> 
<Effects> 
    <Effect EffectName="foo" Description="A foo" CostFormula="P1*2"> 

    </Effect> 
</Effects> 

aber dies erzeugt die Fehler Der Inhalt des Elements ‚Wirkung‘ ist nicht vollständig. Eine von '{P2Name, P3Name, BasedOnStat}' wird erwartet.

<?xml version="1.0" encoding="UTF-8"?> 

<Statistics> 
    <Statistic Name="Strength" Abbreviation="STR" Cost="3"/> 
    <Statistic Name="Toughness" Abbreviation="TOU" Cost="2"/> 
</Statistics> 
<Effects> 
    <Effect EffectName="foo" Description="A foo" CostFormula="P1*2"> 
     <P1Name></P1Name> 
    </Effect> 
</Effects> 

Warum die Aufnahme eines dieser Elemente bedeuten, dass sie alle müssen enthalten sein? Dies entspricht keiner der Definitionen, die ich von xs: all finden kann. Was ich will, ist, dass alle Unterelemente des Ganzen optional sind, aber höchstens einmal auftauchen.

Danke, wirklich meinen Kopf gegen den Bildschirm hier zu schlagen.

Antwort

0

Okay ich beantwortete meine eigene Frage. Ich hatte meine minOccurs auf dem falschen Level. Für den Effekt, den ich will, gehört er zu jedem Element, nicht zu allem.

Verwandte Themen