XML Schema筆記
阿新 • • 發佈:2018-09-03
字符 rac 定義 需求 次數 沒有 常用 整型 any XML Schema是為了彌補DTD的不足而開發的一種新的用於約束和規範XML文檔的標準
定義可出現在文檔中的屬性
定義哪些元素是子元素
定義子元素的次序
定義子元素的數目
定義元素和屬性的數據類型
定義元素和屬性的默認值和固定值
XML Schema 更完善,功能更強大
XML Schema 基於 XML 編寫
XML Schema 支持數據類型
XML Schema 支持命名空間
標記,避免名稱沖突帶來的問題。
名稱沖突, 例如:兩個不同文檔采用同樣的元素或屬性名稱描述兩個不同類型的內容
不同,在使用XML文檔時,可能出現命名混淆。 命名空間采用在元素或屬性名之前使用一個唯一的標識符 ,將不同的標識符對元素或屬
性進行劃分,是其被設置在不同的空間中。 XML為保證標識符的唯一性,使用URI來定義標識符 命名空間的定義:
前置命名法:
語法規則:<元素名 xmlns:標識符="URI">
註意:在使用前置命名法時,需要在文檔中每個元素增加命名空間標識符 默認命名法:
語法規則:<標記名 xmlns="URI">
些元素在默認命名空間中 XML Schema是基於XML文檔編寫的,保存文件的擴展名為 .xsd
<xs:schema xmlns:xs="someURI"> 表示在XML Schema中使用了命名空間機制,其標識符
為 xs 將一個定義好的XML Schema文檔引入XML文檔:
<根元素 xmlns:xsi="someURI"
xsi:noNamespaceSchemaLocation="xsdURI">
xsi:noNamespaceSchemaLocation="xsdURI" : 指定XML Schema文件的路徑
更容易描述允許的文檔內容
更容易驗證數據的正確性
更容易與來自數據庫的數據一起工作
更容易定義數據約束
更容易定義數據模型(數據格式)
更容易在不同數據類型間轉換數據
string 字符串
decimal 十進制
float 單精度32位浮點數
double 雙精度64為浮點數
boolean 布爾類型
date 日期類型:YYYY-MM-DD
time 時間類型:hh:mm:ss
dateTime 日期時間類型:YYYY-MM-DDhh:mm:ss
anyURI 元素中包含一個URI
接受的值類型 XML Schema簡單類型:
語法規則:
enumeration 定義可接受值的一個列表
fractionDigits 定義所允許的最大的小數位數。必須大於等於0。
length 定義所允許的字符或者列表項目的精確數目。必須大於或等於0。
maxExclusive 定義數值的上限。所允許的值必須小於此值。
maxInclusive 定義數值的上限。所允許的值必須小於或等於此值。
maxLength 定義所允許的字符或者列表項目的最大數目。必須大於或等於0。
minExclusive 定義數值的下限。所允許的值必需大於此值。
minInclusive 定義數值的下限。所允許的值必需大於或等於此值。
minLength 定義所允許的字符或者列表項目的最小數目。必須大於或等於0。
pattern 定義可接受的字符的精確序列。
totalDigits 定義所允許的阿拉伯數字的精確位數。必須大於0。
whiteSpace 定義空白字符(換行、回車、空格以及制表符)的處理方式。
復雜類型:
語法規則:
<xs:attribute name="xxx" type="xs:yyy"/>
<xs:attribute name="xxx" type="xs:yyy" default="value"/>
<xs:attribute name="xxx" type="xs:yyy" fixed="value"/>
name 表示屬性名
type 表示屬性數據類型
default 表示默認值
fixed 表示固定值 屬性值默認是可選的,若要規定屬性值必須要有,則使用use屬性:
<xs:attribute name="xxx" type="xs:yyy" use="required"/>
use屬性可選值有:
optional 表示屬性可有可無,作為為默認值
required 表示屬性必須存在
prohibited 表示禁止該屬性 XML Schema元素:
簡易元素:
僅包含文本的元素,不包含其他元素或屬性
語法規則:<xs:element name="xxx" type="xs:yyy"/>
xxx 表示元素名
yyy 表示元素類型 簡易元素的默認值: 語法規則:<xs:element name="xxx" type="xs:yyy" default="value"/>
value 是元素 xxx 的默認值,當未給xxx某個規定值時,value就被分配給該元素 簡易元素的規定值:
語法規則:<xs:element name="xxx" type="xs:yyy" fixed="value"/>
元素xxx值被規定為value,無法改變 復合元素:
具有屬性或其它子元素的元素 復合元素的類型(下列類型元素都可以具有屬性):
空元素
包含其他元素的元素
僅包含文本的元素
包含元素和文本的元素 XML Schema中復合元素的定義:
語法規則:
第一種:
元素引用,<xs:element name="xxx" type="someType"/> 如果XML Schema中,一個元素在不同位置出現不止一次,可以使用:
<xs:element ref="子元素名">
其中 ref 屬性使用已定義的元素,並將其直接指向另一個元素定義模板
simpleType 簡單類型
complexType 復雜類型
simpleContent 描述復雜類型中的簡單數據內容
complexContent 描述復雜類型中的復雜數據類型
attribute 聲明屬性
attributeGroup 聲明屬性組
restriction 設定約束條件
extension 設定擴展內容
all 任意順序
choice 選擇關系
sequence 順序關系
annotation XML文檔註解
documentation annotation子元素,描述註解內容
all 規定子元素可以按照任意順序出現
choice 規定可出現某個字元素或可出現另一個子元素(非此即彼)
sequence 規定子元素必須按照特定順序出現 Occurrence 指示器:定義元素出現頻率
maxOccurs 規定某個元素可出現的最大次數
minOccurs 規定某個元素可出現的最小次數
<xs:element name="someName", type="someType", maxOccurs="value"/>
<xs:element name="someName", type="someType", minOccurs="value"/>
maxOccurs、minOccurs也可以一起使用 Group 指示器:定義相關數批元素
group 元素組
<xs:element name="navn" substitutionGroup="name"/>
在上面的例子中,"name" 元素是主元素,而 "navn" 元素可替代 "name" 元素,在XML文檔
中使用name元素的地方可以使用navn元素替換
註意:
可替換元素的類型必須和主元素相同,或者從主元素衍生而來。假如可替換元素的類型與主
元素的類型相同,那麽就不必規定可替換元素的類型
substitutionGroup 中的所有元素(主元素和可替換元素)必須被聲明為全局元素
全局元素:指 "schema" 元素的直接子元素,而本地元素指嵌套在其他元素中的元素
阻止元素替換:
<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
在XML文檔中不能再用navn元素替換name元素
XML Schema作用:
定義可出現在文檔中的元素定義可出現在文檔中的屬性
定義哪些元素是子元素
定義子元素的次序
定義子元素的數目
定義元素和屬性的數據類型
定義元素和屬性的默認值和固定值
XML Schema優點(相對於DTD):
XML Schema 可針對未來的需求進行擴展XML Schema 更完善,功能更強大
XML Schema 基於 XML 編寫
XML Schema 支持數據類型
XML Schema 支持命名空間
XML Schema對命名空間的支持:
XML Schema支持命名空間,使用命名空間可以明確表示出XML文檔中的元素、屬性和其他標記,避免名稱沖突帶來的問題。
名稱沖突,
<?xml version="1.0" encoding="utf-8"?> <info> <student> <name>Lucy</name> <age>18</age> </student> <teacher> <name>Brun</name> <age>40</age> </teacher> </info>上述的 <name> <age> 在 <student> <teacher> 中元素名一樣,但針對的對象不同含義
不同,在使用XML文檔時,可能出現命名混淆。 命名空間采用在元素或屬性名之前使用一個唯一的標識符
性進行劃分,是其被設置在不同的空間中。 XML為保證標識符的唯一性,使用URI來定義標識符 命名空間的定義:
前置命名法:
語法規則:<元素名 xmlns:標識符="URI">
<?xml version="1.0" encoding="utf-8"?> <student:info xmlns:student="https://www.student.net" xmlns:teacher="https://www.teacher.net"> <student:studentInfo student:id="001"> <上述文檔使用student、teacher兩個標識符student:name>Lucy</student:name> <student:age>18</student:age> </studentInfo> <teacher:teacherInfo> <teacher:name>Brun</teacher:name> <teacher:age>40</teacher:age> </teacher:teacherInfo> </student:info>
註意:在使用前置命名法時,需要在文檔中每個元素增加命名空間標識符 默認命名法:
語法規則:<標記名 xmlns="URI">
<?xml version="1.0" encoding="utf-8"?> <info xmlns="https://wwww.default.net" xmlns:teacher="https://www.teacher.net"> <studentInfo id="001"> <name>Lucy</name> <age>18</age> </studentInfo> <teacher:teacherInfo> <teacher:name>Brun</teacher:name> <teacher:age>40</teacher:age> </teacher:teacherInfo> </info>上述文檔中使用xmlns聲明了一個默認命名空間,元素中沒有使用命名空間前綴的,表示這
些元素在默認命名空間中 XML Schema是基於XML文檔編寫的,保存文件的擴展名為 .xsd
XML Schema文檔結構:
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="someURI"> <!-- XML Schema文檔中元素及屬性 --> <xs:element name="xxx" type="yyy"/> ... </xs:schema>schema是每個XML Schema文檔的根元素
<xs:schema xmlns:xs="someURI"> 表示在XML Schema中使用了命名空間機制,其標識符
為 xs 將一個定義好的XML Schema文檔引入XML文檔:
<根元素 xmlns:xsi="someURI"
xsi:noNamespaceSchemaLocation="xsdURI">
xsi:noNamespaceSchemaLocation="xsdURI" : 指定XML Schema文件的路徑
數據類型:
通過對數據類型的支持,XML Schema:更容易描述允許的文檔內容
更容易驗證數據的正確性
更容易與來自數據庫的數據一起工作
更容易定義數據約束
更容易定義數據模型(數據格式)
更容易在不同數據類型間轉換數據
常見數據類型:
integer 整型string 字符串
decimal 十進制
float 單精度32位浮點數
double 雙精度64為浮點數
boolean 布爾類型
date 日期類型:YYYY-MM-DD
time 時間類型:hh:mm:ss
dateTime 日期時間類型:YYYY-MM-DDhh:mm:ss
anyURI 元素中包含一個URI
XML Schema限定:
當XML Schema規定的數據類型無法滿足需要時,可以為XML元素或者屬性自行定義可接受的值類型 XML Schema簡單類型:
語法規則:
<xs:simpleType> <xs:restriction base="xs:xxx"> <xs:數據類型細節描述 value="value"> ... </xs:restriction> <xs:simpleType>數據類型的限定:
enumeration 定義可接受值的一個列表
fractionDigits 定義所允許的最大的小數位數。必須大於等於0。
length 定義所允許的字符或者列表項目的精確數目。必須大於或等於0。
maxExclusive 定義數值的上限。所允許的值必須小於此值。
maxInclusive 定義數值的上限。所允許的值必須小於或等於此值。
maxLength 定義所允許的字符或者列表項目的最大數目。必須大於或等於0。
minExclusive 定義數值的下限。所允許的值必需大於此值。
minInclusive 定義數值的下限。所允許的值必需大於或等於此值。
minLength 定義所允許的字符或者列表項目的最小數目。必須大於或等於0。
pattern 定義可接受的字符的精確序列。
totalDigits 定義所允許的阿拉伯數字的精確位數。必須大於0。
whiteSpace 定義空白字符(換行、回車、空格以及制表符)的處理方式。
復雜類型:
語法規則:
<xs:complexType> <xs:某個限定作用的元素> <xs:element name="xxx_1" type="xs:yyy_1"/> <xs:element name="xxx_2" type="xs:yyy_2"/> </xs:某個限定作用的元素> </xs:complexType>
XML Schema屬性:
屬性的定義:<xs:attribute name="xxx" type="xs:yyy"/>
<xs:attribute name="xxx" type="xs:yyy" default="value"/>
<xs:attribute name="xxx" type="xs:yyy" fixed="value"/>
name 表示屬性名
type 表示屬性數據類型
default 表示默認值
fixed 表示固定值 屬性值默認是可選的,若要規定屬性值必須要有,則使用use屬性:
<xs:attribute name="xxx" type="xs:yyy" use="required"/>
use屬性可選值有:
optional 表示屬性可有可無,作為為默認值
required 表示屬性必須存在
prohibited 表示禁止該屬性 XML Schema元素:
簡易元素:
僅包含文本的元素,不包含其他元素或屬性
語法規則:<xs:element name="xxx" type="xs:yyy"/>
xxx 表示元素名
yyy 表示元素類型 簡易元素的默認值: 語法規則:<xs:element name="xxx" type="xs:yyy" default="value"/>
value 是元素 xxx 的默認值,當未給xxx某個規定值時,value就被分配給該元素 簡易元素的規定值:
語法規則:<xs:element name="xxx" type="xs:yyy" fixed="value"/>
元素xxx值被規定為value,無法改變 復合元素:
具有屬性或其它子元素的元素 復合元素的類型(下列類型元素都可以具有屬性):
空元素
包含其他元素的元素
僅包含文本的元素
包含元素和文本的元素 XML Schema中復合元素的定義:
語法規則:
第一種:
<xs:element name="xxx"> <xs:complexType> <xs:某個限定作用的元素> <xs:element name="xxx_1" type="xs:yyy_1"/> <xs:element name="xxx_2" type="xs:yyy_2"/> </xs:某個限定作用的元素> </xs:complexType> </xs:element>
第二種:
<xs:element name="xxx" type="someType"/> <xs:complexType name="someType"> <xs:摸個限定作用的元素> <xs:element name="xxx_1" type="xs:yyy_1"/> <xs:element name="xxx_2" type="xs:yyy_2"/> </xs:摸個限定作用的元素> </xs:complexType>第一種描述方法定義的復合類型只能用於xxx元素,而第二種定義的復合類型可被其他
元素引用,<xs:element name="xxx" type="someType"/> 如果XML Schema中,一個元素在不同位置出現不止一次,可以使用:
<xs:element ref="子元素名">
其中 ref 屬性使用已定義的元素,並將其直接指向另一個元素定義模板
常用元素:
element 聲明元素simpleType 簡單類型
complexType 復雜類型
simpleContent 描述復雜類型中的簡單數據內容
complexContent 描述復雜類型中的復雜數據類型
attribute 聲明屬性
attributeGroup 聲明屬性組
restriction 設定約束條件
extension 設定擴展內容
all 任意順序
choice 選擇關系
sequence 順序關系
annotation XML文檔註解
documentation annotation子元素,描述註解內容
指示器元素:
Order 指示器:定義元素順序all 規定子元素可以按照任意順序出現
choice 規定可出現某個字元素或可出現另一個子元素(非此即彼)
sequence 規定子元素必須按照特定順序出現 Occurrence 指示器:定義元素出現頻率
maxOccurs 規定某個元素可出現的最大次數
minOccurs 規定某個元素可出現的最小次數
<xs:element name="someName", type="someType", maxOccurs="value"/>
<xs:element name="someName", type="someType", minOccurs="value"/>
maxOccurs、minOccurs也可以一起使用 Group 指示器:定義相關數批元素
group 元素組
<xs:group name="GroupName"> <xs:Order>(Order指示器在定義group時必須定義) ...(元素組中的元素) </xs:Order> </xs:group>
attributeGroup 屬性組
<xs:attributeGroup name="屬性組名"> ...(屬性組中包含的各個屬性的定義) </xs:attributeGroup>
any元素
<xs:any/>;通過未被 schema 規定的元素來拓展 XML 文檔
<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> <xs:any minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> <person> <firstname>David</firstname> <lastname>Smith</lastname> <children> <childname>mike</childname> </children> </person>
anyAttribute元素
<xs:anyAttribute/> : 通過未被 schema 規定的屬性來擴展 XML 文檔
<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> <xs:anyAttribute/> </xs:complexType> </xs:element> <person gender="male"> <firstname>David</firstname> <lastname>Smith</lastname> </person>
元素替換:
<xs:element name="name" type="xs:string"/><xs:element name="navn" substitutionGroup="name"/>
在上面的例子中,"name" 元素是主元素,而 "navn" 元素可替代 "name" 元素,在XML文檔
中使用name元素的地方可以使用navn元素替換
註意:
可替換元素的類型必須和主元素相同,或者從主元素衍生而來。假如可替換元素的類型與主
元素的類型相同,那麽就不必規定可替換元素的類型
substitutionGroup 中的所有元素(主元素和可替換元素)必須被聲明為全局元素
全局元素:指 "schema" 元素的直接子元素,而本地元素指嵌套在其他元素中的元素
阻止元素替換:
<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
在XML文檔中不能再用navn元素替換name元素
XML Schema筆記