Mein Problem (oder Frage) konzentriert sich auf leere Elemente, die als xs: integer typisiert sind. Ich muss leere Elemente zulassen, also habe ich eine Union verwendet, um ein leeres Element oder eine gültige Ganzzahl als Wert zuzulassen, wie im Schema unten gezeigt. Mein Schema erfüllt jedoch eine doppelte Rolle und muss auch in Software von Drittanbietern importiert werden, die Datentypen wie String, Float, Integer oder Date erwartet. Wenn ich das Schema mit der union-Methode für alle Ganzzahlen codiere, werden sie nicht als Ganzzahlen in der Software eingegeben. Gibt es einen anderen Weg als die union-Methode, ein leeres Element für Integer-Datentypen zuzulassen? Ich möchte nur die eine XSD haben, aber zwei haben, wenn das ist, was passieren muss.XSD: Optionen zum Zulassen von Nullwerten beim Deklarieren von xs: Ganzzahl-Datentypen
Da XML Probe:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<division>
<department>
<roles/>
<employees>7</employees>
</department>
</division>
</company>
Und Schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="nullval">
<xs:union memberTypes="IntegerType empty"/>
</xs:simpleType>
<xs:simpleType name="IntegerType">
<xs:restriction base="xs:integer"/>
</xs:simpleType>
<xs:simpleType name="empty">
<xs:restriction base="xs:string">
<xs:maxLength value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="company">
<xs:complexType>
<xs:sequence>
<xs:element name="division">
<xs:complexType>
<xs:sequence>
<xs:element name="department" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<!-- elements may appear in any order -->
<xs:all minOccurs="0" maxOccurs="1">
<xs:element name="roles" type="nullval"/>
<xs:element name="employees" type="xs:integer"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Ja, ich habe versucht sowohl nillable = "wahr" und minOccurs = "0" und es hat nicht funktioniert (mit XMLSpy mit Saxon). – johkar
Haben Sie eine Kontrolle über das XML, das gesendet wird? Können Sie xsi: nil = "true" für das Rollenelement festlegen? (Ref. http://www.w3.org/TR/xmlschema11-1/#xsi_nil) – sho222
Das ist ein guter Gedanke. Ja, ich habe Zugriff auf das XML. Es ist ziemlich großes XML und es gibt viele Elemente, die als Integer-Datentypen deklariert werden, also bin ich mir nicht sicher, ob ich diesen Weg gehen will. Es könnte einfacher sein, alle leeren Tags einfach zu entfernen, wenn ich einen zusätzlichen Durchlauf machen muss. Vielen Dank. – johkar