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.