web-dev-qa-db-fra.com

Restriction XSD sur l'attribut

Je pense que j'ai beaucoup cherché à ce sujet, mais toujours pas.

Appréciera toute aide.

J'essaie de restreindre un attribut pour un élément avec un contenu vide. "color" devrait avoir une restriction pour ne contenir que 3 chiffres ou minLength = 3 et maxLength = 3. Il ne doit avoir aucun contenu.

<?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: Je sais comment faire une restriction XSD sur un simpleType. Mais je ne sais pas comment le combiner à une entité avec un ComplexType.

Si vous pouviez fournir une solution plus détaillée (ou complète), je serais heureux.

Btw, "color" n'est pas limité à xs: integer. Il s'agit en fait d'une chaîne xs :.

20
ZiggyStardust

Vous pouvez définir votre attribut de la manière suivante. Cet exemple utilise un modèle pour restreindre la valeur, mais vous pouvez également utiliser min et max si cela est plus approprié.

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

Ensuite, dans votre définition d'élément, vous utilisez simplement un ref pour référencer l'attribut défini:

<xs:attribute ref="color"/>

MISE À JOUR (en réponse au commentaire de OP):

Voici à quoi pourrait ressembler tout le schéma:

<?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>
28
David

Les éléments suivants devraient fonctionner

 <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>
1
Baski