2009-06-08 30 views
25

Tôi có câu hỏi về việc thêm hạn chế trong lược đồ xml (xsd) của tôi. Tôi có kiểu phức tạp như:XSD: cách hạn chế số ký tự trong thuộc tính kiểu chuỗi?

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

Tôi có nhiều thuộc tính trong loại phức tạp này và một vài thuộc tính có kiểu chuỗi. Bây giờ tôi muốn các thuộc tính kiểu chuỗi được giới hạn trong y không. của ký tự, làm cách nào để thêm hạn chế này?

Cảm ơn! -Ankush

Trả lời

49

Bạn cần phải tạo một kiểu đơn giản như vậy:

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

và sau đó sử dụng loại mới này trong schema của bạn:

<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

Bạn có thể giới hạn chuỗi thành một số ký tự như sau:

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

xs: dài ở trên giới hạn chiều dài của chuỗi thành chính xác 3 ký tự. Bạn cũng có thể sử dụng xs: minLengthxs: maxlength hoặc cả hai.

Bạn có thể cung cấp một mô hình như vậy:

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

Trên đây nói, 4 ký tự, của bất kỳ của a-z, A-Z. xs: pattern là cụm từ thông dụng, vì vậy hãy đi đến thị trấn với nó.

Bạn có thể hạn chế các chuỗi để một tập hợp các chuỗi theo cách này:

<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: tuy nhiên chiều dài đòi hỏi chuỗi là chiều dài chính xác định nghĩa - nó không chỉ giới hạn độ dài tối đa. –

+0

xs: độ dài là dư thừa, vì điều tra đã xác định tất cả các giá trị chấp nhận được khi có ba ký tự. –

0

bạn luôn có thể xác định độ dài tối đa của một chuỗi trong XSD. Chỉ cần thêm thuộc tính manLength resp. Độ dài nhỏ nhất.

10

Câu trả lời bằng marc_s sẽ yêu cầu bạn xác định loại mới cho mọi độ dài chuỗi có thể bạn có thể sử dụng. Thay vào đó, bạn có thể xác định giới hạn trực tiếp trên chính thuộc tính.

<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

Thêm này và nó làm việc cho tôi,

<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

Bạn có thể muốn xem xét giải thích cách triển khai những gì bạn đang đề xuất với một mẫu mã. Câu trả lời của bạn không rõ ràng vào lúc này –

Các vấn đề liên quan