2013-01-11 39 views
15

Tôi nghĩ rằng tôi đã tìm kiếm rất nhiều về điều này nhưng vẫn không đi.Hạn chế XSD trên Thuộc tính

Sẽ đánh giá cao bất kỳ trợ giúp nào.

Tôi đang cố gắng hạn chế thuộc tính cho phần tử có nội dung trống. "color" nên có giới hạn chỉ giữ 3 chữ số hoặc minLength = 3 và maxLength = 3. Nó không nên có bất kỳ nội dung nào.

<?xml version="1.0" encoding="utf-8"?> 
    <items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=""> 
    <product id="" name=""> 
    <article id="1001"> 
     <umbrella color="100"/> 
     <umbrella color="101"/> 
    </article> 
    <article id="1002"> 
     <umbrella color="110"/> 
    </article> 
    </product> 
</items> 

EDIT: Tôi biết cách thực hiện Hạn chế XSD trên một loại đơn giản. Nhưng tôi không làm thế nào để kết hợp nó với một thực thể với một ComplexType.

Nếu bạn có thể cung cấp giải pháp chi tiết hơn (hoặc đầy đủ), tôi sẽ rất vui.

Btw, "màu" không giới hạn ở xs: số nguyên. Nó thực sự là một xs: string.

Trả lời

23

Bạn có thể xác định thuộc tính của mình tương tự như sau. Ví dụ này sử dụng mẫu để hạn chế giá trị, nhưng bạn cũng có thể sử dụng min và max nếu phù hợp hơn.

<xs:attribute name="color"> 
    <xs:simpleType> 
     <xs:restriction base="xs:integer"> 
      <xs:pattern value="[0-9][0-9][0-9]"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:attribute> 

Sau đó, trong định nghĩa phần tử của bạn, bạn chỉ cần sử dụng một ref để tham khảo các thuộc tính định nghĩa:

<xs:attribute ref="color"/> 

UPDATE (để đáp ứng với nhận xét từ OP):

Dưới đây là những gì mà toàn bộ sơ đồ có thể trông giống như:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:attribute name="color"> 
     <xs:simpleType> 
      <xs:restriction base="xs:integer"> 
       <xs:pattern value="[0-9][0-9][0-9]"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 

    <xs:attribute name="id"> 
     <xs:simpleType> 
      <xs:restriction base="xs:integer"> 
       <xs:pattern value="[0-9][0-9][0-9][0-9]"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 

    <xs:attribute name="name" type="xs:string"/> 

    <xs:complexType name="article_type"> 
     <xs:attribute ref="color" use="required"/> 
    </xs:complexType> 

    <xs:element name="article"> 
     <xs:complexType> 
      <xs:choice maxOccurs="unbounded" minOccurs="0"> 
       <xs:element name="umbrella" type="article_type"/> 
      </xs:choice> 
      <xs:attribute ref="id" use="required"/> 
     </xs:complexType> 
    </xs:element> 

    <xs:element name="product"> 
     <xs:complexType> 
      <xs:choice maxOccurs="unbounded" minOccurs="0"> 
       <xs:element ref="article"/> 
      </xs:choice> 
      <xs:attribute ref="id" use="required"/> 
      <xs:attribute ref="name"/> 
     </xs:complexType> 
    </xs:element> 

    <xs:element name="items"> 
     <xs:complexType> 
      <xs:choice maxOccurs="unbounded" minOccurs="0"> 
       <xs:element ref="product"/> 
      </xs:choice> 
     </xs:complexType> 
    </xs:element> 

</xs:schema> 
+1

chút ngắn hơn: '[0-9] {3}' – 13ren

+0

Cảm ơn bạn đã nhập vào của bạn. Se chỉnh sửa của tôi ở trên. Tôi biết làm thế nào để làm một xs: hạn chế nhưng tôi không biết làm thế nào để kết hợp tất cả thành một mảnh. Vui lòng cung cấp nhiều hơn hoặc đầy đủ cho ví dụ của tôi. Loại phức tạp với các thuộc tính SimpleType với các hạn chế nếu tôi hiểu chính xác. – ZiggyStardust

+0

@ZiggyStardust Xem cập nhật. – David

1

Sau đây sẽ hoạt động

<element name="umbrella" nillable="true" type="umbrellaType"> 

<complexType name="umbrellaType"> 
    <attribute name="color"> 
    <simpleType> 
     <restriction base="int"> 
     <minExclusive value="99"></minExclusive> 
     <maxInclusive value="999"></maxInclusive> 
     </restriction> 
    </simpleType> 
    </attribute> 
</complexType> 
+0

Cảm ơn bạn đã nhập. Se chỉnh sửa của tôi ở trên. Tôi biết làm thế nào để làm một xs: hạn chế nhưng tôi không biết làm thế nào để kết hợp tất cả thành một mảnh. Vui lòng cung cấp nhiều hơn hoặc đầy đủ cho ví dụ của tôi. Loại phức tạp với các thuộc tính SimpleType với các hạn chế nếu tôi hiểu chính xác. – ZiggyStardust

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