web-dev-qa-db-de.com

XSD: Wie kann ich die Anzahl der Zeichen im Attribut "Zeichenfolgentyp" einschränken?

Ich habe eine Frage zum Hinzufügen von Einschränkungen in meinem XML-Schema (xsd). Ich habe einen komplexen Typ wie:

<xsd:complexType name="xxx">
   <xsd:attribute/>
   .....
</xsd:complexType>

Ich habe viele Attribute in diesem komplexen Typ, und wenige von ihnen sind vom Typ String. Jetzt möchte ich, dass diese Zeichenfolgentypattribute auf y no beschränkt sind. von Zeichen, wie füge ich diese Einschränkung hinzu?

Danke! - Ankush

28
Ankush

Sie müssen einen einfachen Typ wie folgt erstellen:

  <xs:simpleType name="LimitedString">
    <xs:restriction base="xs:string">
      <xs:maxLength value="50" />
    </xs:restriction>
  </xs:simpleType>

und verwenden Sie dann diesen neuen Typ in Ihrem Schema:

  <xs:complexType name="test">
    <xs:sequence>
      <xs:element name="abc" type="xs:String" />
    </xs:sequence>
    <xs:attribute type="LimitedString" name="myattr" />
  </xs:complexType>

Marc

54
marc_s

Sie können die Zeichenfolge auf eine Reihe von Zeichen wie folgt beschränken: 

<xs:simpleType name="threeCharString">
  <xs:annotation>
    <xs:documentation>3-char strings only</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:length value="3"/>
  </xs:restriction>
</xs:simpleType>

Die Länge von xs: length begrenzt die Länge der Zeichenfolge auf genau 3 Zeichen. Sie können auch xs: minLength und xs: maxlength oder beide verwenden. 

Sie können ein Muster wie folgt angeben: 

<xs:simpleType name="fourCharAlphaString">
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z]{4}"/>
  </xs:restriction>
</xs:simpleType>

Das Obige sagt, 4 Zeichen von a-z, A-Z. Das xs: pattern ist ein regulärer Ausdruck, also gehe mit ihm in die Stadt. 

Sie können die Zeichenfolge auf eine bestimmte Menge von Zeichenfolgen auf folgende Weise einschränken: 

<xs:simpleType name="iso3currency">
  <xs:annotation>
    <xs:documentation>ISO-4217 3-letter currency codes. Only a subset are defined here.</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
    <xs:length value="3"/>
    <xs:enumeration value="AUD"/>
    <xs:enumeration value="BRL"/>
    <xs:enumeration value="CAD"/>
    <xs:enumeration value="CNY"/>
    <xs:enumeration value="EUR"/>
    <xs:enumeration value="GBP"/>
    <xs:enumeration value="INR"/>
    <xs:enumeration value="JPY"/>
    <xs:enumeration value="RUR"/>
    <xs:enumeration value="USD"/>
  </xs:restriction>
</xs:simpleType>
21
Cheeso

Die Antwort von marc_s erfordert, dass Sie für jede mögliche Stringlänge, die Sie verwenden, einen neuen Typ definieren. Stattdessen können Sie die Einschränkung direkt für das Attribut selbst definieren.

  <xs:complexType name="Test">
    <xs:attribute name="LimitedString">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:maxLength value = "50"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
12
Nemir

Fügen Sie das hinzu und es hat für mich funktioniert,

<xs:element  name="vendor">
    <xs:simpleType>
        <xs:annotation>
            <xs:documentation>80-char strings only</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:maxLength value="80"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>
3

sie können die maximale Länge einer Zeichenfolge immer in xsd ..__ definieren. Fügen Sie einfach das Attribut manLength resp. minimale Länge.

0
Luixv