2009-12-18 31 views

Trả lời

5

Bạn không thể làm điều đó với XML Schemas.

Bạn có thể xác định các thuộc tính trên một phần tử, nhưng không giới hạn chúng vào một phiên bản của phần tử.

4

Bạn có thể thêm một thuộc tính trong products yếu tố cho biết product là đặc trưng.

+0

Cảm ơn lời khuyên của bạn. – Jozef

+0

@AOI Karasu: Tôi nghĩ rằng kiểm tra chắc chắn là không thể – paolot

3

Bạn không thể làm điều này với XMLSchema. Nếu bạn muốn chỉ định các ràng buộc này trong môi trường XML, hãy thử Schematron (http://www.schematron.com/).

0

Câu trả lời của tôi là theo cách này, vì tôi chưa thể thêm nhận xét.

"Bạn có thể thêm thuộc tính trong phần tử sản phẩm cho biết sản phẩm nào được hiển thị."

Giải pháp này dẫn đến một vấn đề khác: kiểm tra xem thuộc tính có trỏ đến phần tử hiện có hay không.

<products featured_id="3"> 
    <product id="1">Prod 1</product> 
    <product id="2">Prod 2</product> 
</products> 
2

Bạn có thể làm như sau ...

<products> 
    <product featured="Yes">Prod 1</product> 
    <product>Prod 2</product> 
</products> 

Sau đó sử dụng một yếu tố duy nhất để hạn chế các thuộc tính như vậy ...

<xs:unique name="UniqueFeaturedProduct"> 
     <xs:selector xpath="product"/> 
     <xs:field xpath="@featured"/> 
</xs:unique> 

Nếu bạn đã hạn chế 'đặc trưng 'thuộc tính cho một liệt kê tùy chọn của một giá trị "Có" thì chỉ có thể có một thuộc tính nổi bật. Một cái gì đó như thế này ...

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="products"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="product" type="productType" maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
     <xs:unique name="UniqueFeaturedProduct"> 
      <xs:selector xpath="product"/> 
      <xs:field xpath="@featured"/> 
     </xs:unique> 
    </xs:element> 
    <xs:simpleType name="featuredType"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Yes"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:complexType name="productType"> 
     <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="featured" type="featuredType" use="optional"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:schema> 
Các vấn đề liên quan