北京做网站建设价格常州 做网站
北京做网站建设价格,常州 做网站,怎么进电力建设公司网站,番禺核酸检测点免费XML Schema 简介XSD 为何使用XML Schema 是基于 XML 的 DTD 替代者。XML Schema 可描述 XML 文档的结构。XML Schema 语言也可作为 XSD#xff08;XML Schema Definition#xff09;来引用。在继续学习之前#xff0c;您需要对下面的知识有基本的了解#xff1a;HTML / XHT…XML Schema 简介XSD 为何使用 XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 可描述 XML 文档的结构。 XML Schema 语言也可作为 XSDXML Schema Definition来引用。在继续学习之前您需要对下面的知识有基本的了解 HTML / XHTML XML 以及 XML 命名空间 对 DTD 的基本了解XML Schema 的作用是定义 XML 文档的合法构建模块类似 DTD。XML Schema: 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空或者是否可包含文本 定义元素和属性的数据类型 定义元素和属性的默认值以及固定值XML Schema 是 DTD 的继任者我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD。理由如下 XML Schema 可针对未来的需求进行扩展 XML Schema 更完善功能更强大 XML Schema 基于 XML 编写 XML Schema 支持数据类型 XML Schema 支持命名空间为什么要使用 XML SchemaXML Schema 支持数据类型XML Schema 最重要的能力之一就是对数据类型的支持。通过对数据类型的支持 可更容易地描述允许的文档内容 可更容易地验证数据的正确性 可更容易地与来自数据库的数据一并工作 可更容易地定义数据约束data facets 可更容易地定义数据模型或称数据格式 可更容易地在不同的数据类型间转换数据注数据约束或称 facets是 XML Schema 原型中的一个术语中文可译为“面”用来约束数据类型的容许值。XML Schema 使用 XML 语法由 XML 编写 XML Schema 有很多好处 不必学习新的语言 可使用 XML 编辑器来编辑 Schema 文件 可使用 XML 解析器来解析 Schema 文件 可通过 XML DOM 来处理 Schema 可通过 XSLT 来转换 SchemaXML Schema 可保护数据通信当数据从发送方被发送到接受方时其要点是双方应有关于内容的相同的“期望值”。通过 XML Schema发送方可以用一种接受方能够明白的方式来描述数据。一种数据比如 03-11-2004在某些国家被解释为11月3日而在另一些国家为当作3月11日。但是一个带有数据类型的 XML 元素比如date typedate2004-03-11/date可确保对内容一致的理解这是因为 XML 的数据类型 date 要求的格式是 YYYY-MM-DD。XML Schema 可扩展XML Schema 是可扩展的因为它们由 XML 编写。通过可扩展的 Schema 定义您可以 在其他 Schema 中重复使用您的 Schema 创建由标准类型衍生而来的您自己的数据类型 在相同的文档中引用多重的 Schema形式良好是不够的我们把符合 XML 语法的文档称为形式良好的 XML 文档比如 它必须以 XML 声明开头 它必须拥有唯一的根元素 开始标签必须与结束标签相匹配 元素对大小写敏感 所有的元素都必须关闭 所有的元素都必须正确地嵌套 必须对特殊字符使用实体即使文档的形式良好仍然不能保证它们不会包含错误并且这些错误可能会产生严重的后果。请考虑下面的情况您订购的了 5 打激光打印机而不是 5 台。通过 XML Schema大部分这样的错误会被您的验证软件捕获到。如何使用 XSDXML 文档可对 DTD 或 XML Schema 进行引用。一个简单的 XML 文档请看这个名为 note.xml 的 XML 文档?xml version1.0?notetoGeorge/tofromJohn/fromheadingReminder/headingbodyDont forget the meeting!/body/noteDTD 文件下面这个例子是名为 note.dtd 的 DTD 文件它对上面那个 XML 文档的元素进行了定义!ELEMENT note (to, from, heading, body)!ELEMENT to (#PCDATA)!ELEMENT from (#PCDATA)!ELEMENT heading (#PCDATA)!ELEMENT body (#PCDATA)第 1 行定义 note 元素有四个子元素to, from, heading, body。第 2-5 行定义了 to, from, heading, body 元素的类型是 #PCDATA。XML Schema下面这个例子是一个名为 note.xsd 的 XML Schema 文件它定义了上面那个 XML 文档的元素?xml version1.0?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchematargetNamespacehttp://www.w3school.com.cnxmlnshttp://www.w3school.com.cnelementFormDefaultqualifiedxs:element namenote xs:complexType xs:sequence xs:element nameto typexs:string/ xs:element namefrom typexs:string/ xs:element nameheading typexs:string/ xs:element namebody typexs:string/ /xs:sequence /xs:complexType/xs:element/xs:schemanote 元素是一个复合类型因为它包含其他的子元素。其他元素 (to, from, heading, body) 是简易类型因为它们没有包含其他元素。对 DTD 的引用此文件包含对 DTD 的引用?xml version1.0?!DOCTYPE note SYSTEM http://www.w3school.com.cn/dtd/note.dtdnotetoGeorge/tofromJohn/fromheadingReminder/headingbodyDont forget the meeting!/body/note对 XML Schema 的引用此文件包含对 XML Schema 的引用?xml version1.0?notexmlnshttp://www.w3school.com.cnxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.w3school.com.cn note.xsdtoGeorge/tofromJohn/fromheadingReminder/headingbodyDont forget the meeting!/body/noteXSD - schema 元素schema 元素是每一个 XML Schema 的根元素?xml version1.0?xs:schema....../xs:schemaschema 元素可包含属性。一个 schema 声明往往看上去类似这样?xml version1.0?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchematargetNamespacehttp://www.w3school.com.cnxmlnshttp://www.w3school.com.cnelementFormDefaultqualified....../xs:schema代码解释xmlns:xshttp://www.w3.org/2001/XMLSchema显示 schema 中用到的元素和数据类型来自命名空间 http://www.w3.org/2001/XMLSchema。同时它还规定了来自命名空间 http://www.w3.org/2001/XMLSchema 的元素和数据类型应该使用前缀 xstargetNamespacehttp://www.w3school.com.cn 声明只是声明并不能说明当前schema默认使用该命名空间被此 schema 定义的元素 (note, to, from, heading, body) 属于命名空间 http://www.w3school.com.cn。xmlnshttp://www.w3school.com.cn 指出默认使用的命名空间。与targetNamespace相同说明默认使用当前命名空间。elementFormDefaultqualified 指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。?xml version1.0 encodingUTF-8?sp:note xmlns:sphttp://www.w3school.com.cn xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.w3school.com.cn note.xsd!--note.xsd使用elementFormDefaultunqualified-- toGeorge/to fromJohn/from headingReminder/heading bodyDont forget the meeting!/body/sp:note?xml version1.0 encodingUTF-8?sp:note xmlns:sphttp://www.w3school.com.cn xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.w3school.com.cn note.xsd!--note.xsd使用elementFormDefaultqualified-- sp:toGeorge/sp:to sp:fromJohn/sp:from sp:headingReminder/sp:heading sp:bodyDont forget the meeting!/sp:body/sp:note命名空间http://www.w3.org/2001/XMLSchema声明的元素最终由http://www.w3.org/2001/XMLSchema.dtd校验 此 XML 文档含有对 XML Schema 的引用?xml version1.0?note xmlnshttp://www.w3school.com.cnxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.w3school.com.cn note.xsdtoGeorge/tofromJohn/fromheadingReminder/headingbodyDont forget the meeting!/body/notexmlnshttp://www.w3school.com.cn 规定了默认命名空间的声明。此声明会告知 schema 验证器在此 XML 文档中使用的所有元素都属于 http://www.w3school.com.cn 这个命名空间。一旦您拥有了可用的 XML Schema 实例命名空间xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance 您就可以使用 schemaLocation 属性了。该属性将具有目标命名空间的 XSD文档与实例文档相关联。 此属性有两个值http://www.w3school.com.cn note.xsd第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置xsi:schemaLocationhttp://www.w3school.com.cn note.xsd提供多个指定命名空间的XSD文档的位置信息 xsi:schemaLocation http://contoso.com/People http://contoso.com/schemas/people.xsd http://contoso.com/schemas/Vehicles http://contoso.com/schemas/vehicles.xsd http://contoso.com/schemas/People http://contoso.com/schemas/people.xsdXSD 简易元素XML Schema 可定义 XML 文件的元素。简易元素指那些只包含文本的元素。它不会包含任何其他的元素或属性。不过“仅包含文本”这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种布尔、字符串、数据等等或者它也可以是您自行定义的定制类型。您也可向数据类型添加限定即 facets以此来限制它的内容或者您可以要求数据匹配某种特定的模式。定义简易元素xs:element namexxx typeyyy/此处 xxx 指元素的名称yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型。最常用的类型是 xs:string xs:decimal xs:integer xs:boolean xs:date xs:time例子这是一些 XML 元素lastnameSmith/lastnameage28/agedateborn1980-03-27/dateborn这是相应的简易元素定义xs:element namelastname typexs:string/xs:element nameage typexs:integer/xs:element namedateborn typexs:date/ 简易元素的默认值和固定值简易元素可拥有指定的默认值或固定值。当没有其他的值被规定时默认值就会自动分配给元素。在下面的例子中缺省值是 redxs:element namecolor typexs:string defaultred/固定值同样会自动分配给元素并且您无法规定另外一个值。在下面的例子中固定值是 redxs:element namecolor typexs:string fixedred/XSD 属性什么是属性简易元素无法拥有属性。假如某个元素拥有属性它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。如何声明属性定义属性的语法是xs:attribute namexxx typeyyy/在此处xxx 指属性名称yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。最常用的类型是 xs:string xs:decimal xs:integer xs:boolean xs:date xs:time实例这是带有属性的 XML 元素lastname langENSmith/lastname这是对应的属性定义xs:attribute namelang typexs:string/属性的默认值和固定值属性可拥有指定的默认值或固定值。当没有其他的值被规定时默认值就会自动分配给元素。在下面的例子中缺省值是 ENxs:attribute namelang typexs:string defaultEN/固定值同样会自动分配给元素并且您无法规定另外的值。在下面的例子中固定值是 ENxs:attribute namelang typexs:string fixedEN/可选的和必需的属性在缺省的情况下属性是可选的。如需规定属性为必选请使用 use 属性xs:attribute namelang typexs:string userequired/对内容的限定当 XML 元素或属性拥有被定义的数据类型时就会向元素或属性的内容添加限定。假如 XML 元素的类型是 xs:date而其包含的内容是类似 Hello World 的字符串元素将不会通过验证。通过 XML schema您也可向您的 XML 元素及属性添加自己的限定。这些限定被称为 facet可译为限定面。XSD 限定 / Facets限定restriction用于为 XML 元素或者属性定义可接受的值。对 XML 元素的限定被称为 facet。对值的限定下面的例子定义了带有一个限定且名为 age 的元素。age 的值不能低于 0 或者高于 120xs:element nameagexs:simpleType xs:restriction basexs:integer xs:minInclusive value0/ xs:maxInclusive value120/ /xs:restriction/xs:simpleType/xs:element 对一组值的限定如需把 XML 元素的内容限制为一组可接受的值我们要使用枚举约束enumeration constraint。下面的例子定义了带有一个限定的名为 car 的元素。可接受的值只有Audi, Golf, BMWxs:element namecarxs:simpleType xs:restriction basexs:string xs:enumeration valueAudi/ xs:enumeration valueGolf/ xs:enumeration valueBMW/ /xs:restriction/xs:simpleType/xs:element 上面的例子也可以被写为xs:element namecar typecarType/xs:simpleType namecarType xs:restriction basexs:string xs:enumeration valueAudi/ xs:enumeration valueGolf/ xs:enumeration valueBMW/ /xs:restriction/xs:simpleType注释在这种情况下类型 carType 可被其他元素使用因为它不是 car 元素的组成部分。对一系列值的限定如需把 XML 元素的内容限制定义为一系列可使用的数字或字母我们要使用模式约束pattern constraint。下面的例子定义了带有一个限定的名为 letter 的元素。可接受的值只有小写字母 a - z 其中的一个xs:element nameletterxs:simpleType xs:restriction basexs:string xs:pattern value[a-z]/ /xs:restriction/xs:simpleType/xs:element 下一个例子定义了带有一个限定的名为 initials 的元素。可接受的值是大写字母 A - Z 其中的三个xs:element nameinitialsxs:simpleType xs:restriction basexs:string xs:pattern value[A-Z][A-Z][A-Z]/ /xs:restriction/xs:simpleType/xs:element 下一个例子也定义了带有一个限定的名为 initials 的元素。可接受的值是大写或小写字母 a - z 其中的三个xs:element nameinitialsxs:simpleType xs:restriction basexs:string xs:pattern value[a-zA-Z][a-zA-Z][a-zA-Z]/ /xs:restriction/xs:simpleType/xs:element 下一个例子定义了带有一个限定的名为 choice 的元素。可接受的值是字母 x, y 或 z 中的一个xs:element namechoicexs:simpleType xs:restriction basexs:string xs:pattern value[xyz]/ /xs:restriction/xs:simpleType/xs:element 下一个例子定义了带有一个限定的名为 prodid 的元素。可接受的值是五个阿拉伯数字的一个序列且每个数字的范围是 0-9xs:element nameprodidxs:simpleType xs:restriction basexs:integer xs:pattern value[0-9][0-9][0-9][0-9][0-9]/ /xs:restriction/xs:simpleType/xs:element 对一系列值的其他限定下面的例子定义了带有一个限定的名为 letter 的元素。可接受的值是 a - z 中零个或多个字母xs:element nameletterxs:simpleType xs:restriction basexs:string xs:pattern value([a-z])*/ /xs:restriction/xs:simpleType/xs:element 下面的例子定义了带有一个限定的名为 letter 的元素。可接受的值是一对或多对字母每对字母由一个小写字母后跟一个大写字母组成。举个例子sToP将会通过这种模式的验证但是 Stop、STOP 或者 stop 无法通过验证xs:element nameletterxs:simpleType xs:restriction basexs:string xs:pattern value([a-z][A-Z])/ /xs:restriction/xs:simpleType/xs:element 下面的例子定义了带有一个限定的名为 gender 的元素。可接受的值是 male 或者 femalexs:element namegenderxs:simpleType xs:restriction basexs:string xs:pattern valuemale|female/ /xs:restriction/xs:simpleType/xs:element 下面的例子定义了带有一个限定的名为 password 的元素。可接受的值是由 8 个字符组成的一行字符这些字符必须是大写或小写字母 a - z 亦或数字 0 - 9xs:element namepasswordxs:simpleType xs:restriction basexs:string xs:pattern value[a-zA-Z0-9]{8}/ /xs:restriction/xs:simpleType/xs:element 对空白字符的限定如需规定对空白字符whitespace characters的处理方式我们需要使用 whiteSpace 限定。下面的例子定义了带有一个限定的名为 address 的元素。这个 whiteSpace 限定被设置为 preserve这意味着 XML 处理器不会移除任何空白字符xs:element nameaddressxs:simpleType xs:restriction basexs:string xs:whiteSpace valuepreserve/ /xs:restriction/xs:simpleType/xs:element 这个例子也定义了带有一个限定的名为 address 的元素。这个 whiteSpace 限定被设置为 replace这意味着 XML 处理器将移除所有空白字符换行、回车、空格以及制表符xs:element nameaddressxs:simpleType xs:restriction basexs:string xs:whiteSpace valuereplace/ /xs:restriction/xs:simpleType/xs:element 这个例子也定义了带有一个限定的名为 address 的元素。这个 whiteSpace 限定被设置为 collapse这意味着 XML 处理器将移除所有空白字符换行、回车、空格以及制表符会被替换为空格开头和结尾的空格会被移除而多个连续的空格会被缩减为一个单一的空格xs:element nameaddressxs:simpleType xs:restriction basexs:string xs:whiteSpace valuecollapse/ /xs:restriction/xs:simpleType/xs:element 对长度的限定如需限制元素中值的长度我们需要使用 length、maxLength 以及 minLength 限定。本例定义了带有一个限定且名为 password 的元素。其值必须精确到 8 个字符xs:element namepasswordxs:simpleType xs:restriction basexs:string xs:length value8/ /xs:restriction/xs:simpleType/xs:element 这个例子也定义了带有一个限定的名为 password 的元素。其值最小为 5 个字符最大为 8 个字符xs:element namepasswordxs:simpleType xs:restriction basexs:string xs:minLength value5/ xs:maxLength value8/ /xs:restriction/xs:simpleType/xs:element 数据类型的限定限定描述enumeration定义可接受值的一个列表fractionDigits定义所允许的最大的小数位数。必须大于等于0。length定义所允许的字符或者列表项目的精确数目。必须大于或等于0。maxExclusive定义数值的上限。所允许的值必须小于此值。maxInclusive定义数值的上限。所允许的值必须小于或等于此值。maxLength定义所允许的字符或者列表项目的最大数目。必须大于或等于0。minExclusive定义数值的下限。所允许的值必需大于此值。minInclusive定义数值的下限。所允许的值必需大于或等于此值。minLength定义所允许的字符或者列表项目的最小数目。必须大于或等于0。pattern定义可接受的字符的精确序列。totalDigits定义所允许的阿拉伯数字的精确位数。必须大于0。whiteSpace定义空白字符换行、回车、空格以及制表符的处理方式。XSD 复合元素什么是复合元素复合元素指包含其他元素及/或属性的 XML 元素。有四种类型的复合元素 空元素 包含其他元素的元素 仅包含文本的元素 包含元素和文本的元素注释上述元素均可包含属性复合元素的例子复合元素product是空的product pid1345/复合元素employee仅包含其他元素employeefirstnameJohn/firstnamelastnameSmith/lastname/employee复合元素food仅包含文本food typedessertIce cream/food复合元素description包含元素和文本descriptionIt happened on date langnorwegian03.03.99/date ..../description如何定义复合元素请看这个复合 XML 元素employee仅包含其他元素employeefirstnameJohn/firstnamelastnameSmith/lastname/employee在 XML Schema 中我们有两种方式来定义复合元素1. 通过命名此元素可直接对employee元素进行声明就像这样xs:element nameemployee xs:complexType xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:sequence /xs:complexType/xs:element假如您使用上面所描述的方法那么仅有 employee 可使用所规定的复合类型。请注意其子元素firstname 以及 lastname被包围在指示器 sequence中。这意味着子元素必须以它们被声明的次序出现。2. employee 元素可以使用 type 属性这个属性的作用是引用要使用的复合类型的名称xs:element nameemployee typepersoninfo/xs:complexType namepersoninfo xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:sequence/xs:complexType如果您使用了上面所描述的方法那么若干元素均可以使用相同的复合类型比如这样xs:element nameemployee typepersoninfo/xs:element namestudent typepersoninfo/xs:element namemember typepersoninfo/xs:complexType namepersoninfo xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:sequence/xs:complexType您也可以在已有的复合元素之上以某个复合元素为基础然后添加一些元素就像这样xs:element nameemployee typefullpersoninfo/xs:complexType namepersoninfo xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:sequence/xs:complexTypexs:complexType namefullpersoninfo xs:complexContent xs:extension basepersoninfo xs:sequence xs:element nameaddress typexs:string/ xs:element namecity typexs:string/ xs:element namecountry typexs:string/ /xs:sequence /xs:extension /xs:complexContent/xs:complexTypeXSD 复合空元素空的复合元素不能包含内容只能含有属性。复合空元素一个空的 XML 元素product prodid1345 /上面的 product 元素根本没有内容。为了定义无内容的类型我们就必须声明一个在其内容中只能包含元素的类型但是实际上我们并不会声明任何元素比如这样xs:element nameproduct xs:complexType xs:complexContent xs:restriction basexs:integer xs:attribute nameprodid typexs:positiveInteger/ /xs:restriction /xs:complexContent /xs:complexType/xs:element在上面的例子中我们定义了一个带有复合内容的复合类型。complexContent 元素给出的信号是我们打算限定或者拓展某个复合类型的内容模型而 integer 限定则声明了一个属性但不会引入任何的元素内容。不过也可以更加紧凑地声明此 product 元素xs:element nameproduct xs:complexType xs:attribute nameprodid typexs:positiveInteger/ /xs:complexType/xs:element或者您可以为一个 complexType 元素起一个名字然后为 product 元素设置一个 type 属性并引用这个 complexType 名称通过使用此方法若干个元素均可引用相同的复合类型xs:element nameproduct typeprodtype/xs:complexType nameprodtype xs:attribute nameprodid typexs:positiveInteger//xs:complexTypeXSD 复合类型 - 仅含元素“仅含元素”的复合类型元素是只能包含其他元素的元素。复合类型仅包含元素XML 元素person仅包含其他的元素personfirstnameJohn/firstnamelastnameSmith/lastname/person您可在 schema 中这样定义 person 元素xs:element nameperson xs:complexType xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:sequence /xs:complexType/xs:element请留意这个 xs:sequence。它意味着被定义的元素必须按上面的次序出现在 person 元素中。或者您可以为 complexType 元素设定一个名称并让 person 元素的 type 属性来引用此名称如使用此方法若干元素均可引用相同的复合类型xs:element nameperson typepersontype/xs:complexType namepersontype xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:sequence/xs:complexTypeXSD 仅含文本复合元素此类型仅包含简易的内容文本和属性因此我们要向此内容添加 simpleContent 元素。当使用简易内容时我们就必须在 simpleContent 元素内定义扩展或限定就像这样xs:element name某个名称 xs:complexType xs:simpleContent xs:extension basebasetype .... .... /xs:extension /xs:simpleContent /xs:complexType/xs:element或者xs:element name某个名称 xs:complexType xs:simpleContent xs:restriction basebasetype .... .... /xs:restriction /xs:simpleContent /xs:complexType/xs:element提示请使用 extension 或 restriction 元素来扩展或限制元素的基本简易类型。这里有一个 XML 元素的例子shoesize其中仅包含文本shoesize countryfrance35/shoesize下面这个例子声明了一个复合类型其内容被定义为整数值并且 shoesize 元素含有名为 country 的属性xs:element nameshoesize xs:complexType xs:simpleContent xs:extension basexs:integer xs:attribute namecountry typexs:string / /xs:extension /xs:simpleContent /xs:complexType/xs:element我们也可为 complexType 元素设定一个名称并让 shoesize 元素的 type 属性来引用此名称通过使用此方法若干元素均可引用相同的复合类型xs:element nameshoesize typeshoetype/xs:complexType nameshoetype xs:simpleContent xs:extension basexs:integer xs:attribute namecountry typexs:string / /xs:extension /xs:simpleContent/xs:complexTypeXSD 带有混合内容的复合类型混合的复合类型可包含属性、元素以及文本。带有混合内容的复合类型XML 元素letter含有文本以及其他元素letterDear Mr.nameJohn Smith/name.Your order orderid1032/orderidwill be shipped on shipdate2001-07-13/shipdate./letter下面这个 schema 声明了这个 letter 元素xs:element nameletter xs:complexType mixedtrue xs:sequence xs:element namename typexs:string/ xs:element nameorderid typexs:positiveInteger/ xs:element nameshipdate typexs:date/ /xs:sequence /xs:complexType/xs:element注释为了使字符数据可以出现在 letter 的子元素之间mixed 属性必须被设置为 true。xs:sequence 标签 (name、orderid 以及 shipdate ) 意味着被定义的元素必须依次出现在 letter 元素内部。我们也可以为 complexType 元素起一个名字并让 letter 元素的 type 属性引用 complexType 的这个名称通过这个方法若干元素均可引用同一个复合类型xs:element nameletter typelettertype/xs:complexType namelettertype mixedtrue xs:sequence xs:element namename typexs:string/ xs:element nameorderid typexs:positiveInteger/ xs:element nameshipdate typexs:date/ /xs:sequence/xs:complexTypeXSD 复合类型指示器通过指示器我们可以控制在文档中使用元素的方式。有七种指示器Order 指示器 All Choice SequenceOccurrence 指示器 maxOccurs minOccursGroup 指示器 Group name attributeGroup nameOrder 指示器 Order 指示器用于定义元素的顺序。All 指示器 all 指示器规定子元素可以按照任意顺序出现且每个子元素必须只出现一次xs:element nameperson xs:complexType xs:all xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:all /xs:complexType/xs:element注释当使用 all 指示器时你可以把 minOccurs 设置为 0 或者 1而只能把 maxOccurs 指示器设置为 1稍后将讲解 minOccurs 以及 maxOccurs。Choice 指示器choice 指示器规定可出现某个子元素或者可出现另外一个子元素非此即彼xs:element nameperson xs:complexType xs:choice xs:element nameemployee typeemployee/ xs:element namemember typemember/ /xs:choice /xs:complexType/xs:element提示如需设置子元素出现任意次数可将 maxOccurs 稍后会讲解设置为 unbounded无限次。Sequence 指示器sequence 规定子元素必须按照特定的顺序出现xs:element nameperson xs:complexType xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:sequence /xs:complexType/xs:elementOccurrence 指示器Occurrence 指示器用于定义某个元素出现的频率。注释对于所有的 Order 和 Group 指示器any、all、choice、sequence、group name 以及 group reference其中的 maxOccurs 以及 minOccurs 的默认值均为 1。maxOccurs 指示器maxOccurs 指示器可规定某个元素可出现的最大次数xs:element nameperson xs:complexType xs:sequence xs:element namefull_name typexs:string/ xs:element namechild_name typexs:string maxOccurs10/ /xs:sequence /xs:complexType/xs:element上面的例子表明子元素 child_name 可在 person 元素中最少出现一次其中 minOccurs 的默认值是 1最多出现 10 次。minOccurs 指示器minOccurs 指示器可规定某个元素能够出现的最小次数xs:element nameperson xs:complexType xs:sequence xs:element namefull_name typexs:string/ xs:element namechild_name typexs:string maxOccurs10 minOccurs0/ /xs:sequence /xs:complexType/xs:element上面的例子表明子元素 child_name 可在 person 元素中出现最少 0 次最多出现 10 次。提示如需使某个元素的出现次数不受限制请使用 maxOccursunbounded 这个声明一个实际的例子名为 Myfamily.xml 的 XML 文件?xml version1.0 encodingISO-8859-1?persons xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:noNamespaceSchemaLocationfamily.xsdpersonfull_nameTony Smith/full_namechild_nameCecilie/child_name/personpersonfull_nameDavid Smith/full_namechild_nameJogn/child_namechild_namemike/child_namechild_namekyle/child_namechild_namemary/child_name/personpersonfull_nameMichael Smith/full_name/person/persons上面这个 XML 文件含有一个名为 persons 的根元素。在这个根元素内部我们定义了三个 person 元素。每个 person 元素必须含有一个 full_name 元素同时它可以包含多至 5 个 child_name 元素。这是schema文件family.xsd?xml version1.0 encodingISO-8859-1?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchemaelementFormDefaultqualifiedxs:element namepersons xs:complexType xs:sequence xs:element nameperson maxOccursunbounded xs:complexType xs:sequence xs:element namefull_name typexs:string/ xs:element namechild_name typexs:string minOccurs0 maxOccurs5/ /xs:sequence /xs:complexType /xs:element /xs:sequence /xs:complexType/xs:element/xs:schemaGroup 指示器Group 指示器用于定义相关的数批元素。元素组元素组通过 group 声明进行定义xs:group name组名称 .../xs:group您必须在 group 声明内部定义一个 all、choice 或者 sequence 元素。下面这个例子定义了名为 persongroup 的 group它定义了必须按照精确的顺序出现的一组元素xs:group namepersongroup xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ xs:element namebirthday typexs:date/ /xs:sequence/xs:group在您把 group 定义完毕以后就可以在另一个定义中引用它了xs:group namepersongroup xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ xs:element namebirthday typexs:date/ /xs:sequence/xs:groupxs:element nameperson typepersoninfo/xs:complexType namepersoninfo xs:sequence xs:group refpersongroup/ xs:element namecountry typexs:string/ /xs:sequence/xs:complexType属性组属性组通过 attributeGroup 声明来进行定义xs:attributeGroup name组名称 .../xs:attributeGroup下面这个例子定义了名为 personattrgroup 的一个属性组xs:attributeGroup namepersonattrgroup xs:attribute namefirstname typexs:string/ xs:attribute namelastname typexs:string/ xs:attribute namebirthday typexs:date//xs:attributeGroup在您已定义完毕属性组之后就可以在另一个定义中引用它了就像这样xs:attributeGroup namepersonattrgroup xs:attribute namefirstname typexs:string/ xs:attribute namelastname typexs:string/ xs:attribute namebirthday typexs:date//xs:attributeGroupxs:element nameperson xs:complexType xs:attributeGroup refpersonattrgroup/ /xs:complexType/xs:elementXSD any 元素any 元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档下面这个例子是从名为 family.xsd 的 XML schema 中引用的片段。它展示了一个针对 person 元素的声明。通过使用 any 元素我们可以通过任何元素在 lastname 之后扩展 person 的内容xs:element nameperson xs:complexType xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ xs:any minOccurs0/ /xs:sequence /xs:complexType/xs:element现在我们希望使用 children 元素来扩展 person 元素。这此种情况下我们就可以这么做即使以上这个 schema 的没有声明任何 children 元素。请看这个 schema 文件名为 children.xsd?xml version1.0 encodingISO-8859-1?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchematargetNamespacehttp://www.w3school.com.cnxmlnshttp://www.w3school.com.cnelementFormDefaultqualifiedxs:element namechildren xs:complexType xs:sequence xs:element namechildname typexs:string maxOccursunbounded/ /xs:sequence /xs:complexType/xs:element/xs:schema下面这个 XML 文件名为 Myfamily.xml使用了来自两个不同的 schema 中的成分family.xsd 和 children.xsd?xml version1.0 encodingISO-8859-1?persons xmlnshttp://www.microsoft.comxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:SchemaLocationhttp://www.microsoft.com family.xsdhttp://www.w3school.com.cn children.xsdpersonfirstnameDavid/firstnamelastnameSmith/lastnamechildren childnamemike/childname/children/personpersonfirstnameTony/firstnamelastnameSmith/lastname/person/persons上面这个 XML 文件是有效的这是由于 schema family.xsd 允许我们通过在 lastname 元素后的可选元素来扩展 person 元素。any 和 anyAttribute 均可用于制作可扩展的文档它们使文档有能力包含未在主 XML schema 中声明过的附加元素。XSD anyAttribute 元素anyAttribute 元素使我们有能力通过未被 schema 规定的属性来扩展 XML 文档下面的例子是来自名为 family.xsd 的 XML schema 的一个片段。它为我们展示了针对 person 元素的一个声明。通过使用 anyAttribute 元素我们就可以向 person 元素添加任意数量的属性xs:element nameperson xs:complexType xs:sequence xs:element namefirstname typexs:string/ xs:element namelastname typexs:string/ /xs:sequence xs:anyAttribute/ /xs:complexType/xs:element现在我们希望通过 gender 属性来扩展 person 元素。在这种情况下我们就可以这样做即使这个 schema 的作者从未声明过任何 gender 属性。请看这个 schema 文件名为 attribute.xsd?xml version1.0 encodingISO-8859-1?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchematargetNamespacehttp://www.w3school.com.cnxmlnshttp://www.w3school.com.cnelementFormDefaultqualifiedxs:attribute namegender xs:simpleType xs:restriction basexs:string xs:pattern valuemale|female/ /xs:restriction /xs:simpleType/xs:attribute/xs:schema下面这个 XML名为 Myfamily.xml使用了来自不同 schema 的成分family.xsd 和 attribute.xsd?xml version1.0 encodingISO-8859-1?persons xmlnshttp://www.microsoft.comxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:SchemaLocationhttp://www.microsoft.com family.xsdhttp://www.w3school.com.cn attribute.xsdperson genderfemalefirstnameJane/firstnamelastnameSmith/lastname/personperson gendermalefirstnameDavid/firstnamelastnameSmith/lastname/person/persons上面这个 XML 文件是有效的这是因为 schema family.xsd 允许我们向 person 元素添加属性。any 和 anyAttribute 均可用于制作可扩展的文档它们使文档有能力包含未在主 XML schema 中声明过的附加元素。XSD 元素替换Element Substitution通过 XML Schema一个元素可对另一个元素进行替换。元素替换让我们举例说明我们的用户来自英国和挪威。我们希望有能力让用户选择在 XML 文档中使用挪威语的元素名称还是英语的元素名称。为了解决这个问题我们可以在 XML schema 中定义一个 substitutionGroup。首先我们声明主元素然后我们会声明次元素这些次元素可声明它们能够替换主元素。xs:element namename typexs:string/xs:element namenavn substitutionGroupname/在上面的例子中name 元素是主元素而 navn 元素可替代 name 元素。请看一个 XML schema 的片段xs:element namename typexs:string/xs:element namenavn substitutionGroupname/xs:complexType namecustinfo xs:sequence xs:element refname/ /xs:sequence/xs:complexTypexs:element namecustomer typecustinfo/xs:element namekunde substitutionGroupcustomer/有效的 XML 文档类似这样根据上面的 schemacustomer nameJohn Smith/name/customer或类似这样kunde navnJohn Smith/navn/kunde阻止元素替换为防止其他的元素替换某个指定的元素请使用 block 属性xs:element namename typexs:string blocksubstitution/请看某个 XML schema 的片段xs:element namename typexs:string blocksubstitution/xs:element namenavn substitutionGroupname/xs:complexType namecustinfo xs:sequence xs:element refname/ /xs:sequence/xs:complexTypexs:element namecustomer typecustinfo blocksubstitution/xs:element namekunde substitutionGroupcustomer/合法的 XML 文档应该类似这样根据上面的 schemacustomer nameJohn Smith/name/customer但是下面的文档不再合法kunde navnJohn Smith/navn/kunde使用 substitutionGroup可替换元素的类型必须和主元素相同或者从主元素衍生而来。假如可替换元素的类型与主元素的类型相同那么您就不必规定可替换元素的类型了。请注意substitutionGroup 中的所有元素主元素和可替换元素必须被声明为全局元素否则就无法工作什么是全局元素Global Elements全局元素指 schema 元素的直接子元素本地元素Local elements指嵌套在其他元素中的元素。一个 XSD 实例本节会为您演示如何编写一个 XML Schema。您还将学习到编写 schema 的不同方法。XML 文档让我们看看这个名为 shiporder.xml 的 XML 文档?xml version1.0 encodingISO-8859-1?shiporder orderid889923xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:noNamespaceSchemaLocationshiporder.xsd orderpersonGeorge Bush/orderperson shipto nameJohn Adams/name addressOxford Street/address cityLondon/city countryUK/country /shipto item titleEmpire Burlesque/title noteSpecial Edition/note quantity1/quantity price10.90/price /item item titleHide your heart/title quantity1/quantity price9.90/price /item/shiporder上面的XML文档包括根元素 shiporder其中包含必须名为 orderid 的属性。shiporder 元素包含三个不同的子元素orderperson、shipto 以及 item。item 元素出现了两次它含有一个 title、一个可选 note 元素、一个 quantity 以及一个 price 元素。上面这一行 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance告知XML解析器根据某个 schema 来验证此文档。这一行xsi:noNamespaceSchemaLocationshiporder.xsd 规定了 schema 的位置在这里它与 shiporder.xml 处于相同的文件夹。创建一个 XML Schema现在我们需要为上面这个 XML 文档创建一个 schema。我们可以通过打开一个新的文件来开始并把这个文件命名为 shiporder.xsd。要创建schema我们仅仅需要简单地遵循 XML 文档中的结构定义我们所发现的每个元素。首先我们开始定义一个标准的 XML 声明?xml version1.0 encodingISO-8859-1 ?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema....../xs:schema在上面的 schema 中我们使用了标准的命名空间 (xs)与此命名空间相关联的 URI 是 Schema 的语言定义Schema language definition其标准值是 http://www.w3.org/2001/XMLSchema。接下来我们需要定义 shiporder 元素。此元素拥有一个属性其中包含其他的元素因此我们将它认定为复合类型。shiporder 元素的子元素被 xs:sequence 元素包围定义了子元素的次序xs:element nameshiporder xs:complexType xs:sequence ... ... /xs:sequence ... /xs:complexType/xs:element然后我们需要把 orderperson 元素定义为简易类型这是因为它不包含任何属性或者其他的元素。类型 (xs:string) 的前缀是由命名空间的前缀规定的此命名空间与指示预定义的 schema 数据类型的 XML schema 相关联xs:element nameorderperson typexs:string/接下来我需要把两个元素定义为复合类型shipto 和 item。我们从定义 shipto 元素开始xs:element nameshipto xs:complexType xs:sequence xs:element namename typexs:string/ xs:element nameaddress typexs:string/ xs:element namecity typexs:string/ xs:element namecountry typexs:string/ /xs:sequence /xs:complexType/xs:element通过 schema我们可使用 maxOccurs 和 minOccurs 属性来定义某个元素可能出现的次数。maxOccurs 定义某元素出现次数的最大值而 minOccurs 则定义某元素出现次数的最小值。maxOccurs 和 minOccurs 的默认值都是 1现在我们可以定义 item 元素了。这个元素可在 shiporder 元素内部出现多次。这是通过把 item 元素的 maxOccurs 属性的值设定为 unbounded 来实现的这样 item 元素就可出现创作者所希望的任意多次。请注意note 元素是可选元素。我们已经把此元素的 minOccurs 属性设定为 0 了xs:element nameitem maxOccursunbounded xs:complexType xs:sequence xs:element nametitle typexs:string/ xs:element namenote typexs:string minOccurs0/ xs:element namequantity typexs:positiveInteger/ xs:element nameprice typexs:decimal/ /xs:sequence /xs:complexType/xs:element现在我们可以声明 shiporder 元素的属性了。由于这是一个必选属性我们规定 userequired。注释此属性的声明必须被置于最后xs:attribute nameorderid typexs:string userequired/这是这个名为 shiporder.xsd 的 schema 文件的文档清单?xml version1.0 encodingISO-8859-1 ?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchemaxs:element nameshiporder xs:complexType xs:sequence xs:element nameorderperson typexs:string/ xs:element nameshipto xs:complexType xs:sequence xs:element namename typexs:string/ xs:element nameaddress typexs:string/ xs:element namecity typexs:string/ xs:element namecountry typexs:string/ /xs:sequence /xs:complexType /xs:element xs:element nameitem maxOccursunbounded xs:complexType xs:sequence xs:element nametitle typexs:string/ xs:element namenote typexs:string minOccurs0/ xs:element namequantity typexs:positiveInteger/ xs:element nameprice typexs:decimal/ /xs:sequence /xs:complexType /xs:element /xs:sequence xs:attribute nameorderid typexs:string userequired/ /xs:complexType/xs:element/xs:schema分割 Schema前面的设计方法非常容易但当文档很复杂时却难以阅读和维护。接下来介绍的设计方法基于首先对所有元素和属性的定义然后再使用 ref 属性来引用它们。这是用新方法设计的 schema 文件?xml version1.0 encodingISO-8859-1 ?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema!-- 简易元素的定义 --xs:element nameorderperson typexs:string/xs:element namename typexs:string/xs:element nameaddress typexs:string/xs:element namecity typexs:string/xs:element namecountry typexs:string/xs:element nametitle typexs:string/xs:element namenote typexs:string/xs:element namequantity typexs:positiveInteger/xs:element nameprice typexs:decimal/!-- 属性的定义 --xs:attribute nameorderid typexs:string/!-- 复合元素的定义 --xs:element nameshipto xs:complexType xs:sequence xs:element refname/ xs:element refaddress/ xs:element refcity/ xs:element refcountry/ /xs:sequence /xs:complexType/xs:elementxs:element nameitem xs:complexType xs:sequence xs:element reftitle/ xs:element refnote minOccurs0/ xs:element refquantity/ xs:element refprice/ /xs:sequence /xs:complexType/xs:elementxs:element nameshiporder xs:complexType xs:sequence xs:element reforderperson/ xs:element refshipto/ xs:element refitem maxOccursunbounded/ /xs:sequence xs:attribute reforderid userequired/ /xs:complexType/xs:element/xs:schema使用指定的类型Named Types第三种设计方法定义了类或者类型这样使我们有能力重复使用元素的定义。具体的方式是首先对简易元素和复合元素进行命名然后通过元素的 type 属性来指向它们。这是利用第三种方法设计的 schema 文件 (shiporder.xsd)?xml version1.0 encodingISO-8859-1 ?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchemaxs:simpleType namestringtype xs:restriction basexs:string//xs:simpleTypexs:simpleType nameinttype xs:restriction basexs:positiveInteger//xs:simpleTypexs:simpleType namedectype xs:restriction basexs:decimal//xs:simpleTypexs:simpleType nameorderidtype xs:restriction basexs:string xs:pattern value[0-9]{6}/ /xs:restriction/xs:simpleTypexs:complexType nameshiptotype xs:sequence xs:element namename typestringtype/ xs:element nameaddress typestringtype/ xs:element namecity typestringtype/ xs:element namecountry typestringtype/ /xs:sequence/xs:complexTypexs:complexType nameitemtype xs:sequence xs:element nametitle typestringtype/ xs:element namenote typestringtype minOccurs0/ xs:element namequantity typeinttype/ xs:element nameprice typedectype/ /xs:sequence/xs:complexTypexs:complexType nameshipordertype xs:sequence xs:element nameorderperson typestringtype/ xs:element nameshipto typeshiptotype/ xs:element nameitem maxOccursunbounded typeitemtype/ /xs:sequence xs:attribute nameorderid typeorderidtype userequired//xs:complexTypexs:element nameshiporder typeshipordertype//xs:schemarestriction 元素显示出数据类型源自于 W3C XML Schema 命名空间的数据类型。因此下面的片段也就意味着元素或属性的值必须是字符串类型的值xs:restriction basexs:stringrestriction 元素常被用于向元素施加限制。请看下面这些来自以上 schema 的片段xs:simpleType nameorderidtype xs:restriction basexs:string xs:pattern value[0-9]{6}/ /xs:restriction/xs:simpleType这段代码指示出元素或属性的值必须为字符串并且必须是连续的六个字符同时这些字符必须是 0-9 的数字。XSD 字符串数据类型字符串数据类型用于可包含字符串的值。字符串数据类型String Data Type字符串数据类型可包含字符、换行、回车以及制表符。下面是一个关于某个 scheme 中字符串声明的例子 xs:element namecustomer typexs:string/文档中的元素看上去应该类似这样 customerJohn Smith/customer或者类似这样customer John Smith /customer注释如果您使用字符串数据类型XML 处理器就不会更改其中的值。规格化字符串数据类型NormalizedString Data Type规格化字符串数据类型源自于字符串数据类型。规格化字符串数据类型同样可包含字符但是 XML 处理器会移除折行回车以及制表符。下面是一个关于在某个 schema 中规格化字符串数据类型的例子xs:element namecustomer typexs:normalizedString/文档中的元素看上去应该类似这样customerJohn Smith/customer或者类似这样customer John Smith /customer注释在上面的例子中XML 处理器会使用空格替换所有的制表符。Token 数据类型Token Data TypeToken 数据类型同样源自于字符串数据类型。Token 数据类型同样可包含字符但是 XML 处理器会移除换行符、回车、制表符、开头和结尾的空格以及连续的空格。下面是在 schema 中一个有关 token 声明的例子xs:element namecustomer typexs:token/文档中的元素看上去应该类似这样customerJohn Smith/customer或者类似这样customer John Smith /customer注释在上面这个例子中XML 解析器会移除制表符。字符串数据类型请注意所有以下的数据类型均衍生于字符串数据类型除了字符串数据类型本身名称描述ENTITIES ENTITY 实体类型ID在 XML 中提交 ID 属性的字符串 (仅与 schema 属性一同使用)IDREF在 XML 中提交 IDREF 属性的字符串(仅与 schema 属性一同使用)IDREFS language包含合法的语言 id 的字符串Name包含合法 XML 名称的字符串NCName NMTOKEN在 XML 中提交 NMTOKEN 属性的字符串 (仅与 schema 属性一同使用)NMTOKENS normalizedString不包含换行符、回车或制表符的字符串QName string字符串token不包含换行符、回车或制表符、开头或结尾空格或者多个连续空格的字符串对字符串数据类型的限定Restriction可与字符串数据类型一同使用的限定 enumeration length maxLength minLength pattern (NMTOKENS、IDREFS 以及 ENTITIES 无法使用此约束) whiteSpaceXSD 日期及时间数据类型Date and Time Data Types日期及时间数据类型用于包含日期和时间的值。日期数据类型Date Data Type日期数据类型用于定义日期。日期使用此格式进行定义YYYY-MM-DD其中 YYYY 表示年份 MM 表示月份 DD 表示天数注释所有的成分都是必需的下面是一个有关 schema 中日期声明的例子xs:element namestart typexs:date/文档中的元素看上去应该类似这样start2002-09-24/start时区如需规定一个时区您也可以通过在日期后加一个 Z 的方式使用世界调整时间UTC time来输入一个日期 - 比如这样start2002-09-24Z/start或者也可以通过在日期后添加一个正的或负时间的方法来规定以世界调整时间为准的偏移量 - 比如这样start2002-09-24-06:00/start或者start2002-09-2406:00/start时间数据类型Time Data Type时间数据类型用于定义时间。时间使用下面的格式来定义hh:mm:ss其中 hh 表示小时 mm 表示分钟 ss 表示秒注释所有的成分都是必需的下面是一个有关 schema 中时间声明的例子xs:element namestart typexs:time/文档中的元素看上去应该类似这样start09:00:00/start或者类似这样start09:30:10.5/start时区如需规定一个时区您也可以通过在时间后加一个 Z 的方式使用世界调整时间UTC time来输入一个时间 - 比如这样start09:30:10Z/start或者也可以通过在时间后添加一个正的或负时间的方法来规定以世界调整时间为准的偏移量 - 比如这样start09:30:10-06:00/start或者start09:30:1006:00/start日期时间数据类型DateTime Data Type日期时间数据类型用于定义日期和时间。日期时间使用下面的格式进行定义YYYY-MM-DDThh:mm:ss其中 YYYY 表示年份 MM 表示月份 DD 表示日 T 表示必需的时间部分的起始 hh 表示小时 mm 表示分钟 ss 表示秒注释所有的成分都是必需的下面是一个有关 schema 中日期时间声明的例子xs:element namestartdate typexs:dateTime/文档中的元素看上去应该类似这样startdate2002-05-30T09:00:00/startdate或者类似这样startdate2002-05-30T09:30:10.5/startdate时区如需规定一个时区您也可以通过在日期时间后加一个 Z 的方式使用世界调整时间UTC time来输入一个日期时间 - 比如这样startdate2002-05-30T09:30:10Z/startdate或者也可以通过在时间后添加一个正的或负时间的方法来规定以世界调整时间为准的偏移量 - 比如这样startdate2002-05-30T09:30:10-06:00/startdate或者startdate2002-05-30T09:30:1006:00/startdate持续时间数据类型Duration Data Type持续时间数据类型用于规定时间间隔。时间间隔使用下面的格式来规定PnYnMnDTnHnMnS其中 P 表示周期(必需) nY 表示年数 nM 表示月数 nD 表示天数 T 表示时间部分的起始 如果您打算规定小时、分钟和秒则此选项为必需 nH 表示小时数 nM 表示分钟数 nS 表示秒数下面是一个有关 schema 中持续时间声明的例子xs:element nameperiod typexs:duration/文档中的元素看上去应该类似这样periodP5Y/period上面的例子表示一个 5 年的周期。或者类似这样periodP5Y2M10D/period上面的例子表示一个 5 年、2 个月及 10 天的周期。或者类似这样periodP5Y2M10DT15H/period上面的例子表示一个 5 年、2 个月、10 天及 15 小时的周期。或者类似这样periodPT15H/period上面的例子表示一个 15 小时的周期。负的持续时间如需规定一个负的持续时间请在 P 之前输入减号period-P10D/period上面的例子表示一个负 10 天的周期。日期和时间数据类型名称描述date定义一个日期值dateTime定义一个日期和时间值duration定义一个时间间隔gDay定义日期的一个部分 - 天 (DD)gMonth定义日期的一个部分 - 月 (MM)gMonthDay定义日期的一个部分 - 月和天 (MM-DD)gYear定义日期的一个部分 - 年 (YYYY)gYearMonth定义日期的一个部分 - 年和月 (YYYY-MM)time定义一个时间值对日期数据类型的限定Restriction可与日期数据类型一同使用的限定 enumeration maxExclusive maxInclusive minExclusive minInclusive pattern whiteSpaceXSD 数值数据类型Numeric Data Types十进制数据类型用于规定一个数值。下面是一个关于某个 scheme 中十进制数声明的例子。xs:element nameprize typexs:decimal/文档中的元素看上去应该类似这样prize999.50/prize或者类似这样prize999.5450/prize或者类似这样prize-999.5230/prize或者类似这样prize0/prize或者类似这样prize14/prize注释您可规定的十进制数字的最大位数是 18 位。整数数据类型整数数据类型用于规定无小数成分的数值。下面是一个关于某个 scheme 中整数声明的例子。xs:element nameprize typexs:integer/文档中的元素看上去应该类似这样prize999/prize或者类似这样prize999/prize或者类似这样prize-999/prize或者类似这样prize0/prize数值数据类型请注意下面所有的数据类型均源自于十进制数据类型除 decimal 本身以外名字秒数byte有正负的 8 位整数表示整型数大小介于-128和127之间decimal十进制数int有正负的 32 位整数表示整型数大小介于-2147483648和 2147483647之间integer整数值long有正负的 64 位整数表示整型数大小介于-9223372036854775808和9223372036854775807之间negativeInteger仅包含负值的整数 ( .., -2, -1.)nonNegativeInteger仅包含非负值的整数 (0, 1, 2, ..)nonPositiveInteger仅包含非正值的整数 (.., -2, -1, 0)positiveInteger仅包含正值的整数 (1, 2, ..)short有正负的 16 位整数表示整型数大小介于-32768和32767之间unsignedLong无正负的 64 位整数unsignedInt无正负的 32 位整数unsignedShort无正负的 16 位整数unsignedByte无正负的 8 位整数对数值数据类型的限定Restriction可与数值数据类型一同使用的限定 enumeration fractionDigits maxExclusive maxInclusive minExclusive minInclusive pattern totalDigits whiteSpaceXSD 杂项数据类型Miscellaneous Data Types其他杂项数据类型包括逻辑、base64Binary、十六进制、浮点、双精度、anyURI、anyURI 以及 NOTATION。逻辑数据类型Boolean Data Type逻辑数据性用于规定 true 或 false 值。下面是一个关于某个 scheme 中逻辑声明的例子xs:attribute namedisabled typexs:boolean/文档中的元素看上去应该类似这样prize disabledtrue999/prize注释合法的布尔值是 true、false、1表示 true 以及 0表示 false。二进制数据类型Binary Data Types二进制数据类型用于表达二进制形式的数据。我们可使用两种二进制数据类型 base64Binary (Base64 编码的二进制数据) hexBinary (十六进制编码的二进制数据)下面是一个关于某个 scheme 中 hexBinary 声明的例子xs:element nameblobsrc typexs:hexBinary/AnyURI 数据类型AnyURI Data TypeanyURI 数据类型用于规定 URI。下面是一个关于某个 scheme 中 anyURI 声明的例子xs:attribute namesrc typexs:anyURI/文档中的元素看上去应该类似这样pic srchttp://www.w3school.com.cn/images/smiley.gif /注释假如某个 URI 含有空格请用 %20 替换它们。杂项数据类型Miscellaneous Data Types 名称描述anyURI base64Binary boolean double float hexBinary NOTATION QName 对杂项数据类型的限定Restriction可与杂项数据类型一同使用的限定 enumeration (布尔数据类型无法使用此约束*) length (布尔数据类型无法使用此约束) maxLength (布尔数据类型无法使用此约束) minLength (布尔数据类型无法使用此约束) pattern whiteSpace*译者注约束指 constraint。XML Schema list 元素list 元素定义单个 simpleType 定义的集合。该属性把简单类型定义为指定数据类型的值的一个列表。下面的例子展示了为一列整数的简单类型?xml version1.0?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchemaxs:element nameintvalues typevaluelistxs:simpleType namevaluelist xs:list itemTypexs:integer//xs:simpleType/xs:schema文档中的 intvalues 元素类似这样注意这个列表有五个列表项intvalues100 34 56 -23 1567/intvalues注释空格被作为列表项的分隔符。XML Schema union 元素union 元素定义多个 simpleType 定义的集合。从一个特定简单数据类型的集合中选择定义一个简单类型元素.本例是一个合并了两个简单类型的简单类型xs:element namejeans_size xs:simpleType xs:union memberTypessizebyno sizebystring / /xs:simpleType/xs:elementxs:simpleType namesizebyno xs:restriction basexs:positiveInteger xs:maxInclusive value42/ /xs:restriction/xs:simpleTypexs:simpleType namesizebystring xs:restriction basexs:string xs:enumeration valuesmall/ xs:enumeration valuemedium/ xs:enumeration valuelarge/ /xs:restriction/xs:simpleTypeXML Schema unique 元素 定义和用法 unique 元素指定属性或元素值或者属性或元素值的组合在指定范围内必须是唯一的。 该值必须唯一或为零。 unique 元素必须按顺序包含下列元素 selector 元素 selector 元素包含 XPath 表达式指定一个元素集在其中由 field 元素指定的值必须唯一。 必须有一个且只有一个 selector 元素。 field 元素 每一个 field 元素均包含一个 XPath 表达式指定对于由 selector 元素指定的元素集而言必须唯一的值属性或元素值。 如果有多个 field 元素则 field 元素的组合必须是唯一的。 在此情况下单个 field 元素的值对于选定元素不一定是唯一的但所有字段的组合必须是唯一的。 必须有一个或多个 field 元素?xml version1.0 encodingUTF-8?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema elementFormDefaultqualified attributeFormDefaultunqualified targetNamespacehttp://www.test.com xmlns:tnhttp://www.test.comxs:element namebooks xs:complexType xs:sequence xs:element namebook maxOccursunbounded xs:complexType xs:sequence xs:element nametitle typexs:string/ xs:element nameprice typexs:decimal/ /xs:sequence xs:attribute nameid typexs:integer/ /xs:complexType /xs:element /xs:sequence /xs:complexType xs:unique namebookUnique xs:selector xpathtn:book/ xs:field xpathid/ /xs:unique/xs:element/xs:schema ?xml version1.0 encodingUTF-8?tn:books xsi:schemaLocationhttp://www.test.com t.xsd xmlns:tnhttp://www.test.com xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancetn:book id1 tn:titlea/tn:title tn:price10/tn:price/tn:booktn:book id2 tn:titlea/tn:title tn:price10/tn:price/tn:booktn:book id1 tn:titlea/tn:title tn:price10/tn:price/tn:book/tn:books问题?xml version1.0 encodingUTF-8?xs:schema xmlns:xshttp://www.w3.org/2001/XMLSchema elementFormDefaultqualified attributeFormDefaultunqualified targetNamespacehttp://www.test.com xmlnshttp://www.test.com xs:attribute namefk typexs:integer/ xs:element namebook xs:complexType xs:sequence xs:element nametitle typexs:string/ /xs:sequence xs:attribute nameid typexs:integer/ xs:attribute reffk/ /xs:complexType /xs:element/xs:schema?xml version1.0 encodingUTF-8?book xmlnshttp://www.test.com xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.test.com test.xsd id1 fkfk title//book 来自为知笔记(Wiz)转载于:https://www.cnblogs.com/java-z/p/3847692.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90200.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!