1. 程式人生 > >XML Schema筆記

XML Schema筆記

字符 rac 定義 需求 次數 沒有 常用 整型 any

XML Schema是為了彌補DTD的不足而開發的一種新的用於約束和規範XML文檔的標準

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: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>
上述文檔使用student、teacher兩個標識符
註意:在使用前置命名法時,需要在文檔中每個元素增加命名空間標識符 默認命名法:
語法規則:<標記名 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筆記