2009-12-18 8 views

Répondre

5

Vous ne pouvez pas faire cela avec XML Schemas.

Vous pouvez définir des attributs sur un élément, mais pas les limiter à une instance de l'élément.

4

Vous pouvez ajouter un attribut dans l'élément products indiquant quel product est en vedette.

+0

Merci pour vos conseils. – Jozef

+0

@AOI Karasu: Je pense que ce n'est pas possible – paolot

3

Vous ne pouvez pas faire cela avec XMLSchema. Si vous souhaitez spécifier ces contraintes dans un environnement XML, essayez Schematron (http://www.schematron.com/).

0

Ma réponse est de cette façon, car je ne peux pas encore ajouter de commentaires.

"Vous pouvez ajouter un attribut dans l'élément products indiquant quel produit est en vedette."

Cette solution conduit à un autre problème: vérifier si l'attribut pointe vers l'élément existant.

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

Vous pouvez faire ce qui suit ...

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

Ensuite, utilisez un élément unique pour contraindre l'attribut ainsi ...

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

Si vous deviez limiter la « vedette 'Attribuer à une énumération facultative d'une valeur "Oui" alors il ne pouvait y avoir qu'un attribut vedette. Quelque chose comme ça ...

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