2009-08-15 5 views
0

J'ai un problème construire un schéma pour ce XML:XML Schema pour un enregistrement de peu compliqué

<record> 
    <field index="1">data</field> 
    <field index="2">data</field> 
    <field index="3">data</field> 
    <field index="4">data</field> 
    <field index="5">data</field> 
    <field index="6">data</field> 
    <group index="7"> 
     <member index="1">data</member> 
     <member index="2">data</member> 
    </group> 
    <field index="8">data</field> 
    <field index="9">data</field> 
    <group index="10"> 
     <member index="1">data</member> 
    </group> 
    <field index="11">data</field> 
    <field index="12">data</field> 
    <field index="13">data</field> 
    <field index="14">data</field> 
    <field index="15">data</field> 
    <field index="16">data</field> 
    <field index="17">data</field> 
</record> 

Le problème est que, je ne sais pas construire un schéma pour le champ » "éléments, j'ai beaucoup d'éléments avec le même nom" champ "mais avec des attributs différents" index ".

J'ai également un problème pour créer un schéma pour les valeurs multiples dans le groupe de variables.

Répondre

0

Bienvenue, pour la field, vous pouvez définir quelque chose le long de ces lignes:

<xsd:element name="field" type="FieldType"/> 
<xsd:complexType name="FieldType> 
    <xsd:simpleContent> 
    <xsd:extension base="xsd:string"> 
     <xsd:attribute name="index" type="xsd:integer" /> 
    </xsd:extension> 
    </xsd:simpleContent> 
</xsd:complexType> 

Quant au group, vous devez utiliser un sequence:

<xsd:element name="group" type="GroupType" /> 
<xsd:complexType name="GroupType"> 
    <xsd:sequence> 
    <xsd:element name="member" type="MemberType" minOccurs="1" maxOccurs="unbounded" /> 
    </xsd:sequence> 
    <xsd:attribute name="index" type="xsd:integer" /> 
</xsd:complexType> 

Je suppose que vous devez avoir au au moins un member pour chaque group. En outre, vous devez définir le MemberType. Je l'ai omis parce que c'est presque identique au FieldType mentionné ci-dessus.

+0

L'OP veut probablement aussi valider que les index ne sont pas répétés. On dirait que ceci peut être fait avec xsd: unique, que je n'ai jamais utilisé (en fait, il ressemble à xsd: unique peut faire une validation dépendante du contexte, donc c'est le moment où j'ai commencé à travailler dessus). Voir http://www.w3.org/TR/xmlschema-0/#specifyingUniqueness – kdgregory

0

Vous venez de découvrir pourquoi c'est un mauvais design pour un schéma. Il n'y a aucun moyen d'associer un type à un index. Vous devriez avoir des noms d'éléments individuels, avec des types individuels. Par exemple:

<person xsi:noNamespaceSchemaLocation="Person.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <name> 
     <first>John</first> 
     <last>Saunders</last> 
    </name> 
    <dob>1967-08-13</dob> 
    <email>[email protected]</email> 
</person> 

pourrait provenir du schéma suivant:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="person"> 
     <xs:annotation> 
      <xs:documentation>A person</xs:documentation> 
     </xs:annotation> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="name"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="first" type="xs:string"/> 
          <xs:element name="last" type="xs:string"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="dob" type="xs:date"/> 
       <xs:element name="email"> 
        <xs:simpleType> 
         <xs:restriction base="xs:token"/> 
        </xs:simpleType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

Ce genre de chose peut limiter des éléments particuliers à des types particuliers de données, et plus encore. Le genre de chose que vous avez ne peut pas restreindre le type d'éléments particuliers car ils doivent tous supporter n'importe quel type de données.

+0

Je n'ai pas créé ce mauvais design, il est livré avec le système à mon bureau, et je suis supposé créer un schéma pour un web un service. – mmspeed

+0

Eh bien, vous ne pouvez pas restreindre les types de données. Assurez-vous que vos gestionnaires savent que le format de données choisi par les auteurs de ce XML garantira presque la saisie de mauvaises données dans le système. Peut-être que cela finira par revenir aux bonnes personnes, qui vont concevoir un schéma qui correspond réellement aux exigences de l'entreprise. –