2009-06-08 2 views
25

Mam pytanie dotyczące dodawania ograniczenia w moim schemacie xml (xsd). Mam typ złożony, jak:XSD: jak ograniczyć liczbę znaków w atrybucie typu łańcucha?

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

Mam wiele atrybutów w tym typie złożonym, a kilka z nich jest typu ciąg. Teraz chcę, aby atrybuty typu string były ograniczone do y no. znaków, jak dodać to ograniczenie?

Dzięki! -Ankush

Odpowiedz

49

Musisz stworzyć prosty typ tak:

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

a następnie użyć tego nowego typu w schemacie:

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

Marc

21

można ograniczyć łańcuch do liczby znaków takich jak:

<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> 

The xs: długość w powyższym zakresie ogranicza długość ciągu do dokładnie 3 znaki. Można również użyć wartości xs: minLength i xs: maksymalna długość lub obie.

Możesz podać wzór tak:

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

Powyższa mówi 4 znaki, o dowolnej a-z, A-Z. Model xs: pattern jest wyrażeniem regularnym, więc przejdź do miasta.

Można ograniczyć ciąg do określonego zestawu strun w ten sposób:

<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> 
+2

xs: długość wymaga jednak ciąg być określona dokładna długość - to nie tylko ograniczyć maksymalną długość. –

+0

xs: długość jest zbędna, ponieważ wyliczenie już określa wszystkie dopuszczalne wartości jako posiadające trzy znaki. –

0

zawsze można określić maksymalną długość łańcucha w XSD. Wystarczy dodać atrybut manLength wzgl. minimalna długość.

10

Odpowiedź marc_s wymagałaby zdefiniowania nowego typu dla każdej możliwej długości łańcucha. Zamiast tego możesz zdefiniować ograniczenie bezpośrednio na samym atrybucie.

<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> 
3

Dodaj to i pracował dla mnie,

<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> 
+0

Możesz rozważyć wyjaśnienie, jak zaimplementować to, co sugerujesz, za pomocą przykładowego kodu. Twoja odpowiedź nie jest jasna w tej chwili –