Paul: XSD Int und Str

Moin,
ich möchte in ein XML Element entweder einen Int von 0 bis 100 oder einen String mit "" (leer) eingeben können. Wie gebe ich das per XSD vor?

    <xs:simpleType name="prozent">  
        <xs:restriction base="xs:nonNegativeInteger">  
            <xs:maxInclusive value="100" />  
        </xs:restriction>  
    </xs:simpleType>

wäre 0 bis 100. Wie bekomme ich da jetzt noch den leeren String rein?

Danke,
Paul

  1. Hallo Paul,

    <xs:simpleType name="prozent">

    <xs:restriction base="xs:nonNegativeInteger">
                <xs:maxInclusive value="100" />
            </xs:restriction>
        </xs:simpleType>

    
    > wäre 0 bis 100. Wie bekomme ich da jetzt noch den leeren String rein?  
      
      
    Setze im Schema beim deklarierten Element nillable="true" und falls das Element in der Instanz leer sein soll: `<element xsi:nil="true"></element>`{:.language-xml} oder `<element xsi:nil="true"/>`{:.language-xml} (bzw. xsi:nil="1").  
      
    Alternativ xs:string als Typ benutzen und den Inhalt mit regulärem Ausdruck (pattern) einschränken sowie `<xs:minLength value="0"/>`{:.language-xml} setzen.  
      
    Grüße,  
    Thomas
    
    1. Setze im Schema beim deklarierten Element nillable="true" und falls das Element in der Instanz leer sein soll: <element xsi:nil="true"></element> oder <element xsi:nil="true"/> (bzw. xsi:nil="1").

      Das versuche ich leider schon. "Liquid XML Studio Developer Edition" kann das aber wohl nicht umsetzen. Bei <xs:element name="intNillable" type="xs:int" nillable="true" /> wird mir ein Fehler gegeben wenn ich im xml folgendes eingebe: <intNillable></intNillable>

      Die Fehlermeldung: "Error Das Element 'intNillable' ist ungültig - Der Wert '' ist gemäß seinem Datentyp 'http://www.w3.org/2001/XMLSchema:int' ungültig -- Die Zeichenfolge '' kein gültiger Int32-Wert.."

      1. Hallo Paul,

        Das versuche ich leider schon. "Liquid XML Studio Developer Edition" kann das aber wohl nicht umsetzen. Bei <xs:element name="intNillable" type="xs:int" nillable="true" /> wird mir ein Fehler gegeben wenn ich im xml folgendes eingebe: <intNillable></intNillable>

        Die Fehlermeldung: "Error Das Element 'intNillable' ist ungültig - Der Wert '' ist gemäß seinem Datentyp 'http://www.w3.org/2001/XMLSchema:int' ungültig -- Die Zeichenfolge '' kein gültiger Int32-Wert.."

        Wie genannt: <intNillable xsi:nil="true"></intNillable>

        Grüße,
        Thomas

        1. Wie genannt: <intNillable xsi:nil="true"></intNillable>

          Aha, jetzt kommt kein Fehler mehr.
          Aber warum muss ich im xml noch angeben das das Element leer ist wenn ich es doch schon in der xsd erlaube? Das ist doch gegen die Logik, dass der Inhalt im xml steht und die Regeln im xsd...

          1. Hallo Paul,

            Aha, jetzt kommt kein Fehler mehr.
            Aber warum muss ich im xml noch angeben das das Element leer ist wenn ich es doch schon in der xsd erlaube? Das ist doch gegen die Logik, dass der Inhalt im xml steht und die Regeln im xsd...

            Ist eine Schema-Konvention. Die String-Alternative ohne diese Angabe hatte ich bereits genannt.

            Grüße,
            Thomas

            1. Ist eine Schema-Konvention. Die String-Alternative ohne diese Angabe hatte ich bereits genannt.

              Ok, danke für den Link. Allerdings fänd ich es besser wenn das nur in der xsd wäre...

              1. Hallo Paul,

                Ok, danke für den Link. Allerdings fänd ich es besser wenn das nur in der xsd wäre...

                Ich würde bei einem numerischen Datentyp überhaupt keine leeren Eingaben zulassen, sondern das Element optional deklarieren (minOccurs="0"). Das ist auch für die spätere Verarbeitung nützlich.

                Grüße,
                Thomas

                1. Danke Dir.