日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

XSD文件详解

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XSD文件详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

XSD (xml Schema Definition)

XSD即XML結構定義, XML Schemas Definition。其本身就是用xml描述的, 且遵循xml語法規則。一份XML schema文件描述了XML文檔的結構.

基本規則:

????.必須以 XML 聲明開頭

????.必須擁有唯一的根元素

????.標簽必須與結束標簽相匹配

????.元素對大小寫敏感

????.所有的元素都必須關閉

????.所有的元素都必須正確地嵌套

????.必須對特殊字符使用實體

?

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 為程序集中的所有類型生成架構。?

?

轉載地址:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.html

總結

以上是生活随笔為你收集整理的XSD文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。