1. 程式人生 > >詳解xml約束中schema約束

詳解xml約束中schema約束

開始時間:2018年9月27日20:56:14

結束時間:2018年9月27日23:18:30

累計時間:2小時

xml自定義: 

一: 約束
 1: dtd約束: 
 2: schema 約束: 
 優點:  比dtd 更能更加強大。 提供了更加豐富的資料型別。 
     
    XML Schema 可針對未來的需求進行擴充套件 
    XML Schema 更完善,功能更強大 
    XML Schema 基於 XML 編寫 (schema本質上就是一個 xml檔案)
    XML Schema 支援資料型別 (提供的更加豐富的資料型別)
    XML Schema 支援名稱空間  

(同一個xml檔案可以被不同的schema約束。 通過名稱空間約束)通過名稱空間來區分多個schema約束。

那麼何為不同的名稱空間?https://blog.csdn.net/CristianoJason/article/details/51147028

好比同一個資料夾下不能存放同名檔案,放在不同的資料夾下 即可。所以放在不同包下面就ok啦。
     
 3: 原理:  圖解: 

 


 4: 入門的案例: 
  
   a: 編寫一個被約束的檔案:  person.xml
   b: 編寫一個schema檔案: 本質上也是一個xml檔案: 
                 字尾名稱 xsd
                 
   c: 檔案內容的說明: 
   <?xml encoding="" version=""?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.example.org/person" 
            elementFormDefault="qualified">
             
    </schema> 
    
    解釋說明: 
     schema: xml當中的根標籤: 
     xmlns="http://www.w3.org/2001/XMLSchema" 
              當前的xml檔案是一個約束檔案。
              
     targetNamespace="http://www.example.org/person" 
           被約束檔案使用。  被約束的檔案通過引入該地址,引入當前的schema檔案。 
        
     elementFormDefault="qualified">
             元素的預設格式
             
   d: 開發具體的約束:

 
     (1) 看xml檔案當中有多少個元素: <element>
     (2)觀察該元素是簡單的元素還是複雜的元素:
      複雜元素: 
       <element name="元素的名稱" >
           <complexType>
                 <sequence>
                    //簡單元素:   name="簡單元素的名稱" type="簡單元素值的型別"
                     <element name="" type=""/>
                 </sequence>
            </complexType>
       </element>
       
       複雜元素: 
        <sequence> 表明元素必須按照順序出現。 
        <all> 元素的順序可以任意。 但是元素出現的次數有且僅有一次。 
        <choice> 簡單元素只能出現其中的一個。

具體可以看這個人的:
   簡單元素: https://blog.csdn.net/CristianoJason/article/details/51282739簡單元素的約束寫的很清楚了

   複雜元素:https://blog.csdn.net/CristianoJason/article/details/51327041(看了這個人兩篇寫的還行)

*簡易元素:僅包含文字(文字可以有很多型別,也可以是自定義的型別),但不會包含任何其他的元素或屬性。
       maxOccurs="unbounded" 出現的次數 不受任何的限制。 任意次。 
       maxOccurs="1" 簡單元素只能出現一次; 修改值, 指定簡單元素出現的次數。

複雜元素可以層層巢狀  (如果複雜元素裡面還是複雜元素)
        
       
    e: 在被約束檔案當中引入schema檔案:(圖解)

xmls:是可以自定義的名字

右邊的 xsi:也可以自定義,但是官方建議xsi  (為了防止和下面重名)

instance意思是例項 指的是右邊是左邊約束的一個例項。

右邊第三個  有兩個引數  


    
  
  5:schema約束  分兩種:

標籤約束:類似於

  這種約束

        <sequence> 表明元素必須按照順序出現。 
        <all> 元素的順序可以任意。 但是元素出現的次數有且僅有一次。 
        <choice> 簡單元素只能出現其中的一個。

約束屬性: 
  
    (1)在</complexType> 之前: 寫一個<attribute  name="" type="" use="">
       name:屬性的名稱:  自定義
       type:  屬性的型別:   int string  約束檔案提供的合法的型別
       use:屬性的約束:    
               值:required 屬性必須: 
               optional 可選擇
               prohibited 禁止的: 屬性不能出現

再放一個例子

執行約束的檔案:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
 targetNamespace="http://www.example.org/person" 
 xmlns:tns="http://www.example.org/person" 
 elementFormDefault="qualified">
 
 <element name="person">
 	<complexType>
 		<!-- <sequence> -->
 		<!-- <all> -->
 		<choice>
 		      <!-- 簡單元素:  -->
			 <element name="name" type="string" maxOccurs="unbounded"></element>
			 <element name="sex" type="string"></element>
			 <element name="des" type="string "></element>
		 </choice>
	   <!--  </all> -->
 		<!-- </sequence> -->
 		
 		<!-- 加入屬性約束 -->
 		<attribute name="id" type="int" use="required">
 		     
 		</attribute>
 		
 		<attribute name="code" type="string" use="prohibited"></attribute>
 	</complexType>
 </element>
 
</schema>

被約束的檔案:

<?xml version="1.0" encoding="UTF-8"?>

<person
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.example.org/person" 
   xsi:schemaLocation="http://www.example.org/person person.xsd" 
   id="21">
 
  <name>ss</name>
  <name>ss</name>
  <name>ss</name>
  <name>ss</name>
 
  
</person>