2012-05-07 56 views
0

每個人我有一個小問題我想要一個屬性充當member_id。XML架構選擇和屬性

如果我把它當成另一標籤我不能讓這原因是其獨特的總量我只能得到它獨一無二的所有full_member類型和basic_member類型。

所以我想我可以用屬性和關鍵來解決這個問題。

但我的問題是,我不能有一個屬性,並選擇彼此相鄰或我只是不知道該怎麼做是正確的。

以下是我的模式到目前爲止。進入

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

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

,但我目前的架構的ID會去1,1,2,2

THANK YOU

+0

我不明白你的意思是「這是監守,如果我有它只是一個標籤,我不能得到它獨特的總量我只能得到它獨特的所有full_member類型和basic_member類型。」你能詳細說明這個問題嗎? – 2012-05-07 17:49:37

+0

因爲我使用其他兩種複雜類型full_member和basic_member我只能使member_id的每個exmaple都是唯一的,會有一個id爲1的正式成員和一個id爲1的基本成員。一個正式成員2和基本2和等等。我想要它做的是全1基本2全3基本4。這些完整的和基本的可以以任何順序輸入E/g基本全滿基本全基本基本但是我需要該ID去1,2,3,4,5,6,7 –

+0

它可能會更容易理解是否您可以提供一個您想要驗證的示例輸入的簡短示例。 – 2012-05-07 20:08:57

回答

0

我認爲這將做到這一點:

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

但那裏在您的模式中似乎有些問題 - 或者至少,它與您的示例XML不匹配。在模式members包含一個member元素只有一個屬性,並且有兩個單獨的和無關的元素,而您的XML文件basic_memberfull_member顯示在member的內部。