2009-12-18 10 views

Odpowiedz

5

Nie można tego zrobić za pomocą schematów XML.

Można definiować atrybuty elementu, ale nie ograniczać ich do jednej instancji elementu.

4

Możesz dodać atrybut w elemencie products wskazującym, który z wymienionych jest product.

+0

Dzięki za porady. – Jozef

+0

@AOI Karasu: Myślę, że to zdecydowanie nie jest możliwe – paolot

3

Nie można tego zrobić z XMLSchema. Jeśli chcesz określić te ograniczenia w środowisku XML, wypróbuj Schematron (http://www.schematron.com/).

0

Moja odpowiedź brzmi tak, ponieważ nie mogę jeszcze dodawać komentarzy.

"Można dodać atrybut w elemencie produktów wskazujący, który produkt jest polecany."

Rozwiązanie to prowadzi do innego problemu: sprawdzenie, czy atrybut wskazuje na istniejący element.

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

Można wykonać następujące czynności ...

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

Następnie za pomocą unikalnego elementu, aby ograniczyć atrybut zatem ...

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

Jeśli było ograniczyć do „wyróżniona "atrybut do opcjonalnego wyliczenia jednej wartości" Tak ", wtedy mógł istnieć tylko jeden wyróżniany atrybut. Coś takiego ...

<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> 
Powiązane problemy