2009-12-18 21 views

Respuesta

5

No se puede hacer eso con XML Schemas.

Puede definir atributos en un elemento, pero no limitarlos a una instancia del elemento.

4

Puede agregar un atributo en el elemento products que indica qué product aparece.

+0

Gracias por su consejo. – Jozef

+0

@AOI Karasu: Creo que comprobar que definitivamente no es posible – paolot

3

No puede hacer esto con XMLSchema. Si desea especificar estas restricciones en un entorno XML, intente con Schematron (http://www.schematron.com/).

0

Mi respuesta es esta, porque no puedo agregar comentarios todavía.

"Puede agregar un atributo en el elemento de productos que indique qué producto se muestra."

Esta solución conduce a otro problema: comprobar si el atributo apunta al elemento existente.

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

Se podría hacer lo siguiente ...

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

continuación, utilizar un elemento único para limitar el atributo de este modo ...

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

Si se va a restringir el 'ofrecido 'atributo a una enumeración opcional de un valor "Sí", entonces solo podría haber un atributo destacado. Algo como esto ...

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