2012-05-07 5 views
0

tout le monde J'ai un petit problème Je voudrais qu'un attribut agisse comme member_id.XML Schema Choix et attribut

C'est parce que je l'ai comme juste un autre tag je ne peux pas le rendre total unique Je peux seulement l'obtenir unique pour tout le type de full_member et le type basic_member. J'ai donc pensé que je pouvais résoudre cela avec un attribut et une clé.

Mais mon problème est que je ne peux pas avoir un attribut et un choix l'un à côté de l'autre ou je ne sais pas comment le faire correctement.

Ci-dessous est mon schéma jusqu'à présent.

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

    <xs:complexType name="memberinfo"> 
     <xs:sequence> 
     <xs:element ref="member_id"/> 
     <xs:element ref="first_name"/> 
     <xs:element ref="last_name"/> 
     <xs:element ref="address"/> 
     <xs:element ref="contact_numbers"/> 
     <xs:element ref="date_joined"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:element name="member_id" type="xs:integer"/> 
    <xs:element name="first_name" type="xs:NCName"/> 
    <xs:element name="last_name" type="xs:NCName"/> 
    <xs:element name="address"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:choice> 
     <xs:element ref="house_number"/> 
     <xs:element ref="house_name"/> 
     </xs:choice> 
     <xs:element ref="street"/> 
     <xs:element ref="town"/> 
     <xs:element ref="city"/> 
     <xs:element ref="county"/> 
     <xs:element ref="postcode"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="house_number" type="xs:integer"/> 
    <xs:element name="house_name" type="xs:string"/> 
    <xs:element name="street" type="xs:string"/> 
    <xs:element name="town" type="xs:NCName"/> 
    <xs:element name="city" type="xs:NCName"/> 
    <xs:element name="county" type="xs:NCName"/> 
    <xs:element name="postcode" type="xs:NCName"/> 
    <xs:element name="contact_numbers"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element maxOccurs="3" ref="contact_number"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="contact_number" type="xs:integer"/> 
    <xs:element name="date_joined" type="xs:date"/> 

<xs:complexType name="basic_member"> 
    <xs:complexContent> 
    <xs:extension base="memberinfo"> 
     <xs:sequence> 
     <xs:element name="activities"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="activity_name" maxOccurs="3"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

    <xs:complexType name="full_member"> 
    <xs:complexContent> 
     <xs:extension base="memberinfo"> 
     <xs:sequence> 
      <xs:element name="activities"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="activity_name" maxOccurs="unbounded"/> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 

    <xs:element name="members" > 
    <xs:complexType> 
     <xs:sequence> 
    <xs:element name="member" maxOccurs="unbounded"> 
    <xs:complexType> 
     <xs:attribute name="member_id"/> 
    </xs:complexType> 
    </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:key name="PK_member"> 
     <xs:selector xpath=".//member" /> 
     <xs:field xpath="member_id" /> 
    </xs:key> 
    </xs:element> 

</xs:schema> 

Exemple d'entrée

<member> 
    <full_member> 
     <member_id>1</member_id> 
     <first_name>Simon</first_name> 
     <last_name>Hughes</last_name> 
     <address> 
      <house_number>12</house_number> 
      <street>Ashgrove Road</street> 
      <town>Forest Town</town> 
      <city>Mansfield</city> 
      <county>Nottinghamshire</county> 
      <postcode>NG385DX</postcode> 
     </address> 
     <contact_numbers> 
      <contact_number>01623948594</contact_number> 
      <contact_number>01623349596</contact_number> 
      <contact_number>01623486599</contact_number> 
     </contact_numbers> 
     <date_joined>2012-05-21</date_joined> 
     <activities> 
      <activity_name>Treadmill</activity_name> 
      <activity_name>Squash</activity_name> 
      <activity_name>Table Tennis</activity_name> 
      <activity_name>Weights</activity_name> 
     </activities> 
    </full_member> 
    </member> 

    <member> 
    <full_member> 
     <member_id>2</member_id> 
     <first_name>Scott</first_name> 
     <last_name>Calladine</last_name> 
     <address> 
      <house_name>Don House</house_name> 
      <street>Simons Road</street> 
      <town>Broadton</town> 
      <city>Supper</city> 
      <county>Nottinghamshire</county> 
      <postcode>N496DX</postcode> 
     </address> 
     <contact_numbers> 
      <contact_number>01623395865</contact_number> 
      <contact_number>01623496959</contact_number> 
      <contact_number>01623005604</contact_number> 
     </contact_numbers> 
     <date_joined>2007-08-16</date_joined> 
     <activities> 
      <activity_name>Static Cycle</activity_name> 
      <activity_name>Badminton</activity_name> 
      <activity_name>Table Tennis</activity_name> 
     </activities> 
    </full_member> 
    </member> 

<member> 
    <full_member> 
     <member_id>3</member_id> 
     <first_name>Fransis</first_name> 
     <last_name>Smith</last_name> 
     <address> 
      <house_name>Don House</house_name> 
      <street>Lemington Close</street> 
      <town>Bradford</town> 
      <city>Bradfordcity> 
      <county>West Yorkshire</county> 
      <postcode>BD723DX</postcode> 
     </address> 
     <contact_numbers> 
      <contact_number>01623497035</contact_number> 
      <contact_number>01623389468</contact_number> 
      <contact_number>01623439949</contact_number> 
     </contact_numbers> 
     <date_joined>2007-08-16</date_joined> 
     <activities> 
      <activity_name>Static Cycle</activity_name> 
      <activity_name>Badminton</activity_name> 
      <activity_name>Table Tennis</activity_name> 
     </activities> 
    </full_member> 
    </member> 

<member> 
    <full_member> 
     <member_id>4</member_id> 
     <first_name>Hayley</first_name> 
     <last_name>Cummingham</last_name> 
     <address> 
      <house_number>87</house_number> 
      <street>Boreast Road</street> 
      <town>Braranger</town> 
      <city>Mansfield</city> 
      <county>Nottinghamshire</county> 
      <postcode>N454HX</postcode> 
     </address> 
     <contact_numbers> 
      <contact_number>01623306031</contact_number> 
      <contact_number>01623206940</contact_number> 
      <contact_number>01623059680</contact_number> 
     </contact_numbers> 
     <date_joined>2012-05-21</date_joined> 
     <activities> 
      <activity_name>Treadmill</activity_name> 
      <activity_name>Squash</activity_name> 
      <activity_name>Table Tennis</activity_name> 
      <activity_name>Weights</activity_name> 
     </activities> 
    </full_member> 
    </member> 

mais avec mon schéma actuel les id irait 1, 1, 2, 2

MERCI

+0

Je ne comprends pas ce que vous voulez dire par "C'est parce que je l'ai juste comme une autre balise je ne peux pas l'obtenir totale unique Je ne peux l'obtenir unique pour tout le type full_member et type basic_member." Pourriez-vous élaborer sur le problème? –

+0

parce que j'utilise deux autres types complexes full_member et basic_member je ne peux que rendre l'attribut member_id unique pour chacun pour exmaple il y aura un membre complet avec id 1 et un membre basique avec id 1. un membre full avec 2 et basic avec 2 et bientôt. ce que je veux faire c'est aller plein 1 basique 2 plein 3 basique 4. ceux-ci ple et bas peuvent être entrés dans n'importe quel ordre E/g basique complet basique basique basique basique complet mais je wud besoin des ids aller 1, 2, 3, 4, 5, 6, 7 –

+0

Il serait probablement plus facile à comprendre si vous pourriez fournir un court exemple d'entrée d'échantillon que vous aimeriez valider. –

Répondre

0

Je pense que ce serait le faire:

<xs:key name="PK_member"> 
    <xs:selector xpath=".//basic_member|.//full_member" /> 
    <xs:field xpath="member_id" /> 
</xs:key> 

mais là semble être quelque chose de mal dans votre schéma - ou du moins, il ne correspond pas à votre exemple de XML. Dans le schéma members contiennent un élément member qui a un seul attribut, et il y a deux séparés - éléments full_member et basic_member, alors que dans votre fichier XML basic_member et full_member montrent à l'intérieur member - et non reliés.