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