web-dev-qa-db-de.com

XSD - Elementtyp als Ganzzahl zulassen OR leer

Ich muss in der Lage sein, einen einfachen Elementtyp als Ganzzahl festzulegen, aber auch zuzulassen, dass er leer ist. In diesem Beispiel wird ein Fehler gesendet, wenn das leere und das leere Feld keine Ganzzahl sind. Wie kann ich das umgehen?

<xsd:element name="weight" type="xsd:integer"/>
14
leanne

Was Sie tun müssen, ist, Einschränkungen für dasselbe Element zuzuweisen und eine Vereinigung für sie vorzunehmen, wie im folgenden Beispiel:

<xs:element name="job_code">
  <xs:simpleType>
    <xs:union>
      <xs:simpleType>
        <xs:restriction base='xs:string'>
          <xs:length value="0"/>
        </xs:restriction>
      </xs:simpleType>
      <xs:simpleType>
        <xs:restriction base='xs:integer' />
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>
</xs:element>

Mit dieser Einschränkung weisen Sie die XML-Validierung an, alle ganzzahligen Werte zuzulassen und das Element zuzulassen, wenn es leer ist.

22
Ahmad Hindash

Wir können dies erreichen, indem wir einen SimpleType erstellen

<xs:simpleType name="NullOrInteger">
    <xs:restriction base="xs:string">
         <xs:pattern value="\d*|\s{0}" />
    </xs:restriction>
</xs:simpleType>

Fügen Sie NullOrInteger als den Typ hinzu, für den Sie eine Einschränkung für eine Ganzzahl oder einen Nullwert wünschen.

zum Beispiel:

<xs:element name="null_or_int" type="NullOrInteger" />
6
krishna pal

Sie müssen das Attribut "nillable" auf "true" setzen:

<xsd:element name="weight" type="xsd:integer" nillable="true"/>

Siehe XML ​​Schema Primer .

3
parsifal
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <product>
        <weight xsi:nil="true"/>
    </product>
</products>

Probieren Sie die oben genannten, sollte funktionieren; Höchstwahrscheinlich haben Sie vergessen, das Attribut xsi: nil hinzuzufügen. Stellen Sie außerdem sicher, dass das weight-Element als untergeordnetes Element kein Zeichen enthält (ein Leerzeichen ist immer noch nicht zulässig). Wenn Sie anstelle einer Ganzzahl einige Zeichen übergeben müssen, müssen Sie einen Vereinigungstyp definieren, der beide zulässt.

1
Petru Gardea

Ich bin auf diese Antwort gekommen, indem ich mithilfe des xsd-Schemas gesucht habe, wie man ein Attribut zu einer nullbaren Ganzzahl macht und auf der Grundlage der JAXB-Klassen generiert wird. Ich habe hier keine Antwort gefunden. Nachdem ich die Antwort gefunden hatte, entschloss ich mich, sie mit anderen zu teilen. Der folgende xsd-Teil generiert einen nicht nullbaren int (int) -Typ:

<xsd:attribute name="length" type="xsd:int" use="required"/>

In Java-Code führt dies zu:

@XmlAttribute(name = "length", required = true)
protected int length;

Wenn wir die erforderliche Verwendung fallen lassen, erhalten wir:

@XmlAttribute(name = "length")
protected Integer length;

Hoffe das hilft jemandem. Und selbst wenn diese Antwort nicht mit der eigentlichen Frage zusammenhängt, finde ich es nützlich, hier zu sein, für diejenigen, die mit der gleichen Suche wie ich hierher kommen!

1
XMight