如何定義Xsd檔案
Xml Schema的用途
1. 定義一個Xml文件中都有什麼元素
2. 定義一個Xml文件中都會有什麼屬性
3. 定義某個節點的都有什麼樣的子節點,可以有多少個子節點,子節點出現的順序
4. 定義元素或者屬性的資料型別
5. 定義元素或者屬性的預設值或者固定值
Xml Schema的根元素:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 表示資料型別等定義來自w3
targetNamespace="http://www.w3schools.com" 表示文件中要定義的元素來自什麼名稱空間
xmlns="http://www.w3schools.com"表示此文件的預設名稱空間是什麼
elementFormDefault="qualified"> 表示要求xml文件的每一個元素都要有名稱空間指定
……定義主體部分……
</xs:schema>
如何定義一個簡單元素
<xs:element 此處表示要定義一個元素
name=”color” 表示要定義元素的名稱
type=”xs:string” 表示要定義元素的資料型別
default=”red” 表示定義元素的預設值
fixed=”red”/> 表示要定義元素的固定值,此元素只可以取“red”值
以上定義了一個簡單元素,元素例項:<color>red</color>
如何定義一個屬性
<xs:attribute
name=”birthday” 表示要定義屬性的名字
type=”xs:date” 表示要定義屬性的資料型別
default=”2001-01-11” 表示要定義屬性的預設值
fixed=”2001-01-11” 表示要定義屬性的固定值
use=”required”/> 表示此屬性是否是必須指定的,即如果不指定就不符合Schema,預設沒有use=”required”屬性表示屬性可有可無
如何定義元素或者屬性值的限制
1.最大值最小值限制
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/> 大於等於0,<xs: minExclusive>表示最小值但是不包括指定值
<xs:maxInclusive value="120"/> 小於等於120,<xs: maxExclusive>
</xs:restriction>
</xs:simpleType>
</xs:element>
2.列舉限制,指只能在指定的幾個值中取值
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
3.模式(pattern)限制 ,指字串的格式必須滿足制定的匹配模式
例子 |
說明 |
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element> |
表示只能在小寫字母中取一個值 |
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
表示必須是三個大寫字母 |
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
表示必須是三個字母,可以是大寫或小寫的 |
<xs:element name="choice">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[xyz]"/>
</xs:restriction>
</xs:simpleType>
</xs:element> |
表示必須是xyz中的一個 |
<xs:element name="prodid">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
表示數字的範圍是0-99999 |
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
表示必須是0或者多個小寫字元組成的序列 |
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
表示必須是多個字母。 |
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
表示是male或者female中的一個 |
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
表示必須是8個字母數字字元 |
4.字串長度的限制
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
長度必須是8。
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
表示長度在5-8之間
6. 對於空白字元的限制
示例 |
說明 |
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element> |
保留原樣,表示xml處理器不會移除或者替換任何空白字元 |
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
指回車,換行,Tab都會被替換成空格處理 |
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
|
去掉多於一個空格,和html中處理方式相同 |
如何定義複雜型別
複雜型別是指定義元素中包含屬性或者子元素的型別
1. 定義只包含子元素的複雜型別
<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:complexType>
</xs:element>
2. 定義只包含屬性的複雜型別
<xs:element name="product" type="prodtype"/>
<xs:complexType name="prodtype">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
3. 定義只包含內容的複雜型別
<xs:element name="shoesize" type="shoetype"/>
<xs:complexType name="shoetype">
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
4. 定義包含內容和子元素混合的複雜型別
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
以上定義對應的Xml
<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>
5. 定義包含屬性和子元素的複雜型別
使用指示器
在Xsd中的指示器包括
1. 順序指示器
1) All
指示子元素可以以任何順序出現,並且每一個元素都必須出現一次
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
2) Choice
指示子元素中可以出現一個或者另一個
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
3) Sequence
指示子元素必須按照順序出現
<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:complexType>
</xs:element>
2. 出現次數指示器minOccurs,maxOccurs
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
3. 組指示器(group Indicators)
用來定義相關的一組元素
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
用來定義一組相關的屬性
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>
Any關鍵字
表示可以有任意元素
<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>
anyAttribute關鍵字
<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>
substitutionGroup關鍵字
表示某一個元素和另一個替代元素定義相同
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
<xs:sequence>
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType><xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>
文中的例子都來自w3school.
請尊重作者的勞動,轉載請保留連結 玉開的技術部落格
相關文章
- 給XML檔案定義DTDXML
- IntelliJ IDEA 新增本地xsd檔案IntelliJIdea
- xsd 自定義list 實現
- Mysql如何讀.frm結尾的表結構定義檔案MySql
- 避免標頭檔案重複定義
- Go 專案配置檔案的定義和讀取Go
- 如何定義專案的成功標準?
- pch檔案的使用, 標頭檔案使用, 常量(const)的定義,以及一些常用的巨集定義
- 在 MotionScene 檔案中定義場景約束
- iOS開發:pch檔案中的巨集定義iOS
- 為什麼不在標頭檔案做定義
- XML Schema(XSD)詳解:定義 XML 文件結構合法性的完整指南XML
- 如何設定檔案的緩衝
- IT專案經理是如何定義“成功”的
- 如何定義NoSQLSQL
- XSD中自定義型別的三種方式型別
- 根據Golang定義的介面生成proto檔案Golang
- Vivado使用技巧(13):CSV檔案定義IO Ports
- mac CLion cmake 呼叫自己定義的標頭檔案Mac
- Jbpm3.2 釋出定義好的流程檔案
- 通過xml配置檔案定義及佈局元件XML元件
- springboot如何使用自定義配置檔案Spring Boot
- 如何給PDF檔案設定密碼?密碼
- 如何實現檔案共享,檔案共享的設定方法-鐳速
- 定義樣式並獲取上傳檔案路徑及指定檔案型別型別
- C語言中的標頭檔案中的巨集定義C語言
- [原創]PROGRESS .I 檔案中定義變數要小心變數
- Host是什麼?如何設定host檔案?
- mysql 5.0 for power Desinger使用的資料庫定義檔案MySql資料庫
- docker最新版本如何自定義配置檔案Docker
- 如何定義良好的API?API
- 在Oracle中,如何定時刪除歸檔日誌檔案?Oracle
- 如何定製Linux外圍檔案系統?Linux
- 如何在MacOS中設定共享檔案協議?Mac協議
- win10 如何設定資料夾隱藏檔案 win10 如何隱藏檔案Win10
- php 自定義配置檔案PHP
- 如何設定redo log的OMF 及如何修改log檔案大小
- JavaScript 和 TypeScript 交叉口 —— 型別定義檔案(*.d.ts)JavaScriptTypeScript型別