Schema之簡單元素、複合元素和屬性

哈哈哈哈哈我撒發表於2011-09-09

的三要素:簡單元素,複合元素和屬性:

1、簡單元素:只含有文字的XML元素。它不可以含有其他元素或屬性;

   1.1、為複合元素新增簡單元素的兩種方式:直接新增方式如下:

 

1 <xs:element  name ="Book">
2     <xs:complexType >
3       <xs:sequence  >
4         <xs:element  name ="title"  type ="xs:string"></xs:element>
5       </xs:sequence>
6     </xs:complexType>
7   </xs:element>

或者引用的方式:

 

 

1 <xs:element  name ="Book">
2     <xs:complexType >
3       <xs:sequence  >
4         <xs:element  ref ="title" ></xs:element>
5       </xs:sequence>
6     </xs:complexType>
7   </xs:element>

 

 1.2、為簡單元素設定預設值和固定值:

 

1 <xs:element  name ="price" type ="xs:double"  default ="22.22"></xs:element>
2   <xs:element  name ="press" type ="xs:string"  fixed="清華大學出版社"></xs:element>

 

2、屬性:簡單的元素沒有屬性,當一個元素包含屬性時,則成為複合元素,

    2.1、屬性的定義非常類似於簡單元素:

 

 

1 <xs:attribute  name ="lang" type ="xs:string"></xs:attribute>

     2.2、為複合元素新增屬性的方式和新增簡單元素的方式類似:

 

1 <xs:attribute  name ="lang" type ="xs:string"></xs:attribute>
2 <xs:element  name ="Book">
3     <xs:complexType >
4       <xs:attribute  ref ="lang" ></xs:attribute>
5     </xs:complexType>
6   </xs:element>

或者:

 

 

1 <xs:element  name ="Book">
2    <xs:complexType >
3      <xs:attribute  name ="lang"  type ="xs:string"></xs:attribute>
4    </xs:complexType>
5  </xs:element>

2.3、同樣可以為屬性新增預設值或者固定值;

 

 

1 <xs:attribute  name ="lang" type ="xs:string"  default ="xie"></xs:attribute>

2.4、任意屬性和必須屬性:必須屬性就是說在寫XML文件時,該屬性必須含有,不是可有可無的;通過use 屬性來指定:

 

 

1 <xs:element  name ="Book">
2     <xs:complexType >
3       <xs:attribute  name ="lang" type ="xs:string" use ="required"></xs:attribute>
4     </xs:complexType>
5   </xs:element>

3、複合元素:是含有其他元素和/或屬性的XML元素

複合元素分為四種:空元素、只含有其他元素、只含有文字、含有其他元素和文字;

   3.1、空元素:

1<product pid="1345"/>
空元素的定義:
01方法一:
02<xs:element  name ="product">
03    <xs:complexType >
04      <xs:attribute  name ="proid"  type ="xs:positiveInteger"></xs:attribute>
05    </xs:complexType>
06  </xs:element>
07方法二:
08 <xs:element  name ="product"  type ="prodtype"/>
09  <xs:complexType  name ="prodtype">
10    <xs:attribute  name ="prodid"  type ="xs:positiveInteger"/>
11  </xs:complexType>
如果使用方法二,幾個元素可以同時引用相同的複合型別;
3.2、只含有其他元素的複合元素:
1<person>
2<firstname>John</firstname>
3<lastname>Smith</lastname>
4</person>

schema:

01 方法一:
02 <xs:element  name ="person">
03     <xs:complexType  >
04       <xs:sequence  >
05         <xs:element  name ="firstname" type ="xs:string"/>
06         <xs:element name ="lastname"  type ="xs:string"/>
07       </xs:sequence>
08     </xs:complexType>
09   </xs:element>
10 方法二:
11 <xs:element name="person" type="persontype"/>
12 <xs:complexType name="persontype">
13   <xs:sequence>
14     <xs:element name="firstname" type="xs:string"/>
15  
16     <xs:element name="lastname" type="xs:string"/>
17   </xs:sequence>
18 </xs:complexType>
同樣如果使用方法二,幾個元素可以同時引用相同的複合型別;

    3.3、只含有簡單文字或屬性的複合元素:

 

1 <shoesize country="france">35</shoesize>

這種型別只含有簡單內容(文字和屬性),因此我們在內容周圍新增一個simpleContent元素,當用到簡單內容時,你必須在simpleContent元素裡定義一個擴充套件或約束,就像這樣:

01 <xs:element name="somename">
02  
03   <xs:complexType>
04     <xs:simpleContent>
05       <xs:extension base="basetype">
06         ....
07         ....
08       </xs:extension>    
09     </xs:simpleContent>
10   </xs:complexType>
11  
12 </xs:element>
13 OR
14 <xs:element name="somename">
15   <xs:complexType>
16     <xs:simpleContent>
17       <xs:restriction base="basetype">
18  
19         ....
20         ....
21       </xs:restriction>    
22     </xs:simpleContent>
23   </xs:complexType>
24 </xs:element>

tips:用extension/restriction元素擴充套件或限制元素的基本簡單型別;

 

     3.4、混合內容的元素:既含有文字又含有其他元素;

 

1 <letter>
2 Dear Mr.<name>John Smith</name>.
3 Your order <orderid>1032</orderid>
4 will be shipped on <shipdate>2001-07-13</shipdate>
5 </letter>

schema:

 

 

01 <xs:element name="letter">
02   <xs:complexType mixed="true">
03     <xs:sequence>
04       <xs:element name="name" type="xs:string"/>
05  
06       <xs:element name="orderid" type="xs:positiveInteger"/>
07       <xs:element name="shipdate" type="xs:date"/>
08     </xs:sequence>
09  
10   </xs:complexType>
11 </xs:element>

上面為了使字元資料能出現在"letter"子元件之間,mixed屬性必須設定為"true"。<xs:sequence>標籤指出了已定義的元素(name, orderid 和shipdate)在"letter"元素裡必須以指定的順序出現;

相關文章