| 

.NET C# Java Javascript Exception

6
Hallo,

ich erstelle gerade ein XML-Schema und habe eine Frage dazu.
Die zugehörige XML sieht (auszugsweise) folgendermaßen aus:

<PART NAME="FP01" TYPE="LEADING_PART"/>
<PART NAME="WP01" TYPE="ATTACHED_PART"/>
<PART NAME="FP11" TYPE="ATTACHED_PART"/>
<PART NAME="IP01" TYPE="ATTACHED_PART"/>


Es darf nur ein PART mit TYPE="LEADING_PART" geben, alle anderen PART müssen TYPE="ATTACHED_PART" haben.
Ich wollte im Schema mit einer Enumeration arbeiten - macht das Sinn? Wie kann ich das dann so einschränken, dass das erste Element immer "LEADING_PART" als Attribut haben muss und alle anderen dann "ATTACHED_PART"?

<xs:element name="PART">
<xs:complexType>
<xs:attribute name="NAME" type="xs:string" use="required" />
<xs:attribute name="TYPE" type="PartType" use="required" />
</xs:complexType>
</xs:element>

<xs:simpleType name="PartType">
<xs:restriction base="xs:string">
<xs:enumeration value="LEADING_PART" />
<xs:enumeration value="ATTACHED_PART" />
</xs:restriction>
</xs:simpleType>


Vielleicht habt ihr eine bessere Lösung.

Danke!
16.11.2011
2 Antworten
0
Hallo ConveyorBeltCoder,

vielleicht ist es ja eine Option für Dich, das Ganze über zwei verschiedene Elemente zu lösen, etwa so:
<LEADINGPART NAME="FP01" />
<ATTACHEDPART NAME="WP01" />
<ATTACHEDPART NAME="FP11" />
<ATTACHEDPART NAME="IP01" />

Im Schema kannst Du sowas mit einer sequence abbilden.

Gruß
Florian
16.11.2011
ffordermaier 8,4k 3 9
0
Hallo Florian,
das ist leider keine Option für mich, da die XML, die ich validieren muss, von einer Fremdfirma kommt und so spezifiziert ist.
17.11.2011
Ich hab gestern nochmal die XSD Referenz durchforstet. Ich sehe da keine Möglichkeit, die Einschränkung so hinzubekommen, wie Du es möchtest. Eine Schemavalidierung prüft nicht die Semantik eines Dokuments und das ist das, was Du erreichen möchtest.
Alternativ könntest Du das Inputdokument zuerst via XSLT in ein XML Dokument transformieren, dass die Elemente so darstellt, wie ich es in meiner Antwort vorgeschlagen habe.
Oder du prüfst die Attribute bzw. deren Anzahl mit XPath.
ffordermaier 17.11.2011

Stelle deine Xml-Frage jetzt!