XSD文件结构详解
XSD (xml Schema Definition)
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.
?
?
---------XSD工具
XSD工具位于:C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin目錄下。XSD工具有很多功能,如下:
?
1、將XDR?轉換 XSD
使用精簡 XML 數據架構文件生成 XML 架構。 XDR 為早期基于 XML 的架構格式。
?
2、XML轉換XSD
使用 XML 文件生成 XML 架構。
?
3、XSD轉換DataSet
使用 XSD 架構文件生成公共語言運行庫 DataSet 類。 生成的類為規則 XML 數據提供復雜對象模型。
?
4、XSD轉換?類
使用 XSD 架構文件生成運行庫類。 生成的類可以與 System.Xml.Serialization.XmlSerializer 一起使用,來讀寫遵循該架構的 XML 代碼。
?
5、類?轉換XSD
使用運行庫程序集文件中的一個或多個類型生成 XML 架構。 生成的架構定義了 System.Xml.Serialization.XmlSerializer 使用的 XML 格式。
?
XSD語法格式如下:
Xsd ?file.xdr ?[/outputdir:directory][/parameters:file.xml]
xsd ?file.xml ?[/outputdir:directory] [/parameters:file.xml]
xsd ?file.xsd ?{/classes | /dataset} [/element:element]
???????????? [/enableLinqDataSet] [/language:language]
????????????????????????? [/namespace:namespace] [/outputdir:directory] [URI:uri]
????????????????????????? [/parameters:file.xml]
Xsd ?{file.dll | file.exe} ?[/outputdir:directory] [/type:typename [...]][/parameters:file.xml]
?
參數說明
緊跟在xsd命令后面的參數是指定的要轉換的輸入文件。 該輸入文件必須將擴展名指定為下列之一:.xdr、.xml、.xsd、.dll 或 .exe。
?
1、? 如果指定一個 XDR 架構文件(.xdr 擴展名),則 Xsd.exe 將 XDR 架構轉換為 XSD 架構。 輸出文件與 XDR 架構同名,但擴展名為 .xsd。
?
2、? 如果指定一個 XML 文件(.xml 擴展名),則 Xsd.exe 從文件中的數據推導出架構并產生一個 XSD 架構。 輸出文件與 XML 文件同名,但擴展名為 .xsd。
?
3、? 如果指定一個 XML 架構文件(.xsd 擴展名),則 Xsd.exe 將為對應于 XML 架構的運行庫對象生成源代碼。
?
4、如果指定一個運行庫程序集文件(.exe 或 .dll 擴展名),則 Xsd.exe 為該程序集中的一個或多個類型生成架構。 可以使用 /type 選項來指定為其生成架構的類型。 輸出架構被命名為 schema0.xsd、schema1.xsd,依此類推。 僅當給定類型使用 XMLRoot 自定義屬性指定命名空間時,Xsd.exe 才生成多個架構。
?
常規選項說明:
/h[elp]
顯示該工具的命令語法和選項。
/o[utputdir]:directory
指定輸出文件的目錄。 此參數只能出現一次。 默認為當前目錄。
/?
顯示該工具的命令語法和選項。
/P[arameters]: file.xml
從指定的 .xml 文件讀取各種操作模式的選項。 縮寫形式為“/p:”。 有關更多信息,請參見下面的“備注”部分。
?
XSD?文件選項
必須為 xsd 文件僅指定下列選項中的一個。
選項說明
?
/c[lasses]
生成與指定架構相對應的類。 若要將 XML 數據讀入對象,請使用 System.Xml.Serialization.XmlSerializer.Deserializer 方法。
?
/d[ataset]
生成一個從 DataSet 派生的類,該類與指定的架構相對應。 若要將 XML 數據讀入派生類,請使用 System.Data.DataSet.ReadXml 方法。
?
還可以為 .xsd 文件指定下列任何選項。
選項說明 :
?
/e[lement]:element
指定架構中要為其生成代碼的元素。 默認情況下,鍵入所有元素。 可以多次指定該參數。
?
/enableDataBinding
在所有生成的類型上實現 INotifyPropertyChanged 接口以啟用數據綁定。 縮寫形式為“/edb”。
?
/enableLinqDataSet
(縮寫形式:/eld。) 指定可使用 查詢的生成的數據集。 此選項在同時指定 /dataset 選項的情況下使用。 有關更多信息,請參見 LINQ to DataSet Overview 和 Querying Typed DataSets。 有關使用 LINQ 的常規信息,請參見Language-Integrated Query (LINQ)。
?
/f[ields]
生成字段,而不是生成屬性。 默認情況下生成屬性。
?
/l[anguage]:language
指定要使用的編程語言。 從 CS(默認情況下為 C#)、VB (Visual Basic)、JS (JScript) 或 VJS (Visual J#) 中進行選擇。 也可指定實現 System.CodeDom.Compiler.CodeDomProvider 的類的完全限定名
?
/n[amespace]:namespace
為生成的類型指定運行庫命名空間。 默認命名空間為 Schemas。
?
/nologo
取消顯示版權標志。
?
/order
在所有粒子成員上生成顯式順序標識符。
?
/o[ut]: directoryName
指定要放置文件的輸出目錄。默認為當前目錄。
?
/u[ri]:uri
為架構中要為其生成代碼的元素指定 URI。 該 URI(如果存在)應用于使用 /element 選項指定的所有元素。
?
DLL?和 EXE?文件選項
選項說明:
?
/t[ype]:typename
指定要為其創建架構的類型的名稱。 可以指定多個類型參數。 如果 typename 不指定一個命名空間,則 Xsd.exe 將程序集中的所有類型與指定類型相匹配。 如果 typename 指定一個命名空間,則僅匹配那個類型。 如果 typename 以星號字符 (*) 結尾,則此工具匹配所有以 * 前的字符串開頭的類型。 如果省略 /type 選項,則 Xsd.exe 為程序集中的所有類型生成架構。?
XSD (xml Schema Definition)
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.
?
?
---------XSD工具
XSD工具位于:C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin目錄下。XSD工具有很多功能,如下:
?
1、將XDR?轉換 XSD
使用精簡 XML 數據架構文件生成 XML 架構。 XDR 為早期基于 XML 的架構格式。
?
2、XML轉換XSD
使用 XML 文件生成 XML 架構。
?
3、XSD轉換DataSet
使用 XSD 架構文件生成公共語言運行庫 DataSet 類。 生成的類為規則 XML 數據提供復雜對象模型。
?
4、XSD轉換?類
使用 XSD 架構文件生成運行庫類。 生成的類可以與 System.Xml.Serialization.XmlSerializer 一起使用,來讀寫遵循該架構的 XML 代碼。
?
5、類?轉換XSD
使用運行庫程序集文件中的一個或多個類型生成 XML 架構。 生成的架構定義了 System.Xml.Serialization.XmlSerializer 使用的 XML 格式。
?
XSD語法格式如下:
Xsd ?file.xdr ?[/outputdir:directory][/parameters:file.xml]
xsd ?file.xml ?[/outputdir:directory] [/parameters:file.xml]
xsd ?file.xsd ?{/classes | /dataset} [/element:element]
???????????? [/enableLinqDataSet] [/language:language]
????????????????????????? [/namespace:namespace] [/outputdir:directory] [URI:uri]
????????????????????????? [/parameters:file.xml]
Xsd ?{file.dll | file.exe} ?[/outputdir:directory] [/type:typename [...]][/parameters:file.xml]
?
參數說明
緊跟在xsd命令后面的參數是指定的要轉換的輸入文件。 該輸入文件必須將擴展名指定為下列之一:.xdr、.xml、.xsd、.dll 或 .exe。
?
1、? 如果指定一個 XDR 架構文件(.xdr 擴展名),則 Xsd.exe 將 XDR 架構轉換為 XSD 架構。 輸出文件與 XDR 架構同名,但擴展名為 .xsd。
?
2、? 如果指定一個 XML 文件(.xml 擴展名),則 Xsd.exe 從文件中的數據推導出架構并產生一個 XSD 架構。 輸出文件與 XML 文件同名,但擴展名為 .xsd。
?
3、? 如果指定一個 XML 架構文件(.xsd 擴展名),則 Xsd.exe 將為對應于 XML 架構的運行庫對象生成源代碼。
?
4、如果指定一個運行庫程序集文件(.exe 或 .dll 擴展名),則 Xsd.exe 為該程序集中的一個或多個類型生成架構。 可以使用 /type 選項來指定為其生成架構的類型。 輸出架構被命名為 schema0.xsd、schema1.xsd,依此類推。 僅當給定類型使用 XMLRoot 自定義屬性指定命名空間時,Xsd.exe 才生成多個架構。
?
常規選項說明:
/h[elp]
顯示該工具的命令語法和選項。
/o[utputdir]:directory
指定輸出文件的目錄。 此參數只能出現一次。 默認為當前目錄。
/?
顯示該工具的命令語法和選項。
/P[arameters]: file.xml
從指定的 .xml 文件讀取各種操作模式的選項。 縮寫形式為“/p:”。 有關更多信息,請參見下面的“備注”部分。
?
XSD?文件選項
必須為 xsd 文件僅指定下列選項中的一個。
選項說明
?
/c[lasses]
生成與指定架構相對應的類。 若要將 XML 數據讀入對象,請使用 System.Xml.Serialization.XmlSerializer.Deserializer 方法。
?
/d[ataset]
生成一個從 DataSet 派生的類,該類與指定的架構相對應。 若要將 XML 數據讀入派生類,請使用 System.Data.DataSet.ReadXml 方法。
?
還可以為 .xsd 文件指定下列任何選項。
選項說明 :
?
/e[lement]:element
指定架構中要為其生成代碼的元素。 默認情況下,鍵入所有元素。 可以多次指定該參數。
?
/enableDataBinding
在所有生成的類型上實現 INotifyPropertyChanged 接口以啟用數據綁定。 縮寫形式為“/edb”。
?
/enableLinqDataSet
(縮寫形式:/eld。) 指定可使用 查詢的生成的數據集。 此選項在同時指定 /dataset 選項的情況下使用。 有關更多信息,請參見 LINQ to DataSet Overview 和 Querying Typed DataSets。 有關使用 LINQ 的常規信息,請參見Language-Integrated Query (LINQ)。
?
/f[ields]
生成字段,而不是生成屬性。 默認情況下生成屬性。
?
/l[anguage]:language
指定要使用的編程語言。 從 CS(默認情況下為 C#)、VB (Visual Basic)、JS (JScript) 或 VJS (Visual J#) 中進行選擇。 也可指定實現 System.CodeDom.Compiler.CodeDomProvider 的類的完全限定名
?
/n[amespace]:namespace
為生成的類型指定運行庫命名空間。 默認命名空間為 Schemas。
?
/nologo
取消顯示版權標志。
?
/order
在所有粒子成員上生成顯式順序標識符。
?
/o[ut]: directoryName
指定要放置文件的輸出目錄。默認為當前目錄。
?
/u[ri]:uri
為架構中要為其生成代碼的元素指定 URI。 該 URI(如果存在)應用于使用 /element 選項指定的所有元素。
?
DLL?和 EXE?文件選項
選項說明:
?
/t[ype]:typename
指定要為其創建架構的類型的名稱。 可以指定多個類型參數。 如果 typename 不指定一個命名空間,則 Xsd.exe 將程序集中的所有類型與指定類型相匹配。 如果 typename 指定一個命名空間,則僅匹配那個類型。 如果 typename 以星號字符 (*) 結尾,則此工具匹配所有以 * 前的字符串開頭的類型。 如果省略 /type 選項,則 Xsd.exe 為程序集中的所有類型生成架構。?
總結
- 上一篇: 内存为什么还有管理?
- 下一篇: consul简介