第四章_XDR_(XMLSchema)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第四章XML语法检查XDR(XMLSchema)孙宝军计算机信息管理学院主要内容:XMLSchema简介XMLSchema组件的细节XMLSchema组件的XML表达XMLSchema的数据类型4.1XMLSchema简介一、DTD的特点:DTD用一种完全不同于XML的特殊规范来定义XML中的各种符号;DTD的数据类型有限;DTD不支持名域,易与元素名发生冲突。因而一个XML文档只能与一个DTD文档相对应;无法规定元素的反复次数,尤其是表示某种闭区间特别困难。XMLSchema即模式(有时也被翻译为大纲、架构),其中以W3C组织的XSD(XMLSchemaDefinition)和微软的XDR(XMLDATAREDUCED)是最为著名。XMLSchema是用XML语法编写的;支持的数据类型更加丰富;XMLSchema支持名域,使一个XML文件可以对应多个Schema文档;二、XMLSchema的特点具有扩展性:XMLSchema本身是一份XML文件,它可以建立自己的数据类型,同时可使用多份XMLSchema验证XML文档;多种数据类型:可以像数据库一般,详细描述文档各元素的数据,且在不同的元素间轻松转换数据;XML语法,可与XML使用相同的编辑工具软件;为什么使用XMLSchema?从Schema的第一个方案到现在为止,W3C成员共提交了5个Schema规范:XDR(XMLDATAREDUCED);DCD(DocumentContentDescriptionforXML);SOX(SchemaforObject-OrientedXML);DDML(DocumentDefinitionMarkupLanguage);XSD(XMLSchemaDfinition)。XMLSchema语言是由W3C指定的XMLSchema规范,简称为XSD(XMLSchemaDefinition)。三、其它的文档定义方式2001年5月2日,XMLSchema规范成为了W3C的正式推荐标准。XDR由Microsoft公司提出(并不是W3C的标准),事实上已经被业界普遍认可,得到许多产品(MSBiztalkServer、MSSQLServer2000、MSOffice2000和IE5.X)的广泛支持。现以介绍XDR为主,辅助介绍XSD。三、其它的文档定义方式4.2XDR的指定XML文档可以使用一个或多个XDR作为验证依据,并且可以分割到最小单位元素,因而可以在需要使用XDR的元素处,使用名域(具体见第5章)指定XDR文档范围与名域的范围相同。其具体语法为:<元素名xmlns=“X-Schema:XDR文档的URI”>例EX4-1.xml例EX4-2.xml【说明】实例中在根元素处用CnGamexmlns=x-schema:ex4-1.xml对XML文档的模式文档EX4-1.xml进行指定,在解析器进行解析时,会自动找到实例EX4-1.xml进行XML文档的有效性验证。4.2XDR的指定4.3XDR语法细节一、XDR的框架结构?xmlversion=1.0encoding=GB2312?Schemaname=schema名称xmlns=urn:schemas-microsoft-com:xml-dataxmlns:dt=urn:schemas-microsoft-com:datatypes………/Schema【说明】文档的第一条语句仍然是XML声明;Schema元素是XDR文档的根元素,并且只能以Schema元素作为其根元素。第二条语句中有一个name属性声明,它用来指定XDR文档的名称,可省略。两个名域声明:前者(默认名域)用来表示将引用微软的模式类型定义;后者(名域dt)用来指明XDR文档中将引用XDR中特有的数据类型。在以后使用XDR编写模式文件时,以上XDR框架结构是必需且固定的。一、XDR的框架结构1、属性声明(AttributeType)其语法格式为:<AttributeTypename=“属性名称”required=“yes”或“no”dt:values=“枚举值”default=“默认值”dt:type=“数据类型”……</AttributeType>二、属性声明和元素属性声明【说明】AttributeType含有5个属性:name属性用来指定可在XML文档中出现的属性的名称,必须设置且不能重复;Required属性用来设置在XML文档中出现的属性是否必须设置;dt:values用来限定在XML文档中出现的属性的取值范围;default用来设置在XML文档中出现的属性的默认值,即在不设置属性值的情况下属性的取值;dt:type用来设置属性值的数据类型,其默认值为string。二、属性声明和元素属性声明2、元素属性声明(attribute)其语法格式为:attributetype=“属性名称”required=“yes”或“no”default=“默认值”/【说明】attribute是XDR文档中进行元素属性声明的元素,它含有3个属性,分别发挥不同的作用。二、属性声明和元素属性声明type属性用来指定可在XML文档中出现的属性的名称,必须设置且不能重复;required属性用来设置在XML文档中出现的属性是否必须设置,“yes”表示必须设置;“no”表示可以设置也可以不设置;default属性用来设置在XML文档中出现的属性的默认值,即在不设置属性值情况下属性的取值;required属性和default属性必须搭配使用。二、属性声明和元素属性声明表4-1required属性和default属性的搭配RequiredDefault作用no设置一个合理值相当于DTD中的#IMPLIED,开发时可以在XML文档中不设置该属性,但浏览器会自动添加该属性no不设置任何值相当于DTD中的#IMPLIED,开发时可以在XML文档中不设置该属性,浏览器也不会自动添加该属性yes设置一个合理值相当于DTD中的#FIXED,开发时可以在XML文档中不设置该属性,但浏览器会自动添加该属性yes不设置任何值相当与DTD中的#REQUIRED,开发时在XML文档中一定要设置该属性例EX4-3.xml例EX4-4.xml【说明】在EX4-3.xml中声明了属性ID和zone,它们不属于任何元素;ElementTypename=TeamNamecontent=textOnlyattributetype=IDdefault=C1//ElementType将属性ID指定给元素TeamName,其default的属性值将以<attribute>声明为准,即default=“C1”,而required的属性值将完全遵循<AttributeType>声明中的限定。即required=“yes”。所以它相当于DTD中的#FIXED默认值,在实例EX4-4.xml中不设置,在浏览时会自动补上。在EX4-3.xml中:ElementTypename=Timecontent=textOnlydt:type=timeattributetype=zonerequired=yes//ElementType声明将属性zone指定给元素Time,其default的属性值在<AttributeType>和<attribute>均未声明,即default未设置,而required=“yes”。所以它相当于DTD中的#REQUIRED默认值,在实例EX4-4.xml中必须设置。【注意】在使用AttributeType声明属性时的有关required和default等属性的设置,在attribute声明时可以改动,最终以attribute声明为准!二、属性声明和元素属性声明1、元素声明(ElementType)<ElementTypename=“元素名称”content=“empty”或“textonly”或“eltonly”或“mixed”model=“open”或“closed”order=“one”或“seq”或“many”dt:type=“元素内容的数据类型”>……</ElementType>三、元素声明和子元素声明【说明】name属性用来指定元素的名称,必须设置且不能重复;content属性用来设置元素的类型,其属性值的含义如表4-2所示,其默认值为“mixed”;model属性用来设置元素是否可以拥有额外的内容,如果为“open”则允许,如果为“close”则不允许;order属性用来设置元素中子元素出现的次序,其属性值的含义如表4-3所示,其默认值为“many”;dt:type用来设置元素的数据类型,其默认值为string。三、元素声明和子元素声明表4-2content的属性值含义属性值含义textonly字符串相当于DTD中的(#PCDATA)eltonly可以包含子元素,相当于DTD中的(子元素1,子元素2,…,子元素n)形式mixedTextonly与eltonly的综合,相当于DTD中的混合结构empty空元素表4-3order属性值含义属性值含义one允许某一集合的元素作为子元素,此时必须将model设置为“open”seq子元素必须以规定的次序出现many子元素的次序可以任意出现,相当于DTD中的(子元素1|子元素2…|子元素n)*结构2、子元素声明(element)其语法格式为:<elementtype=“元素名称”minOccurs=“0”或“1”maxOccurs=“1”或“*”/>【说明】element用来声明某元素为另一元素的子元素:type属性用来设置子元素的名称,必须设置且与某一<ElementType>的属性name的属性值相同;minOccurs属性用来设置于元素在XML文档中出现的最少次数(0);maxOccurs属性用来设置子元素在XML文档中出现的最多次数。三、元素声明和子元素声明【注意】当属性minOccurs和属性maxOccurs都不设置时,其默认值为1!例EX4-5.xml例EX4-6.xml【说明】(l)实例EX4-5.xml中用<ElementType>声明了Opponent、TeamName、Place、Date、Time、Star、StarName等元素,其中Opponent、Star是父元素,包含有子元素。三、元素声明和子元素声明(2)实例EX4-5.xml中用<element>声明TeamName、Place、Date、Time、StarName等子元素。elementtype=StarNameminOccurs=0maxOccurs=*/为Star元素指定名为StarName的子元素,且子元素出现的次数不限。三、元素声明和子元素声明在DTD中,出现了一种嵌套结构,即用小括号“()”将子元素括起来形成DTD的树状结构。XDR文档则是采用模型组(group)实现的,其语法格式为:<grouporder=“one”或“seq”或“many”minOccurs=“0”或“l”maxOccurs=“1”或“*”>…….</group>四、模型组和模型组定义【说明】(l)group:声明某元素在XDR文档中还可包含其它子元素或其它信息,并且可以形成复杂的嵌套、选择以及混合结构;(2)order:子元素出现的次序,其属性值的含义请参阅表4-3,其默认值为“many”;(3)minOccurs:设置子元素出现的最少次数;(4)maxOccurs:设置子元素出现的最多次数。四、模型组和模型组定义例EX4-7.xml例EX4-8.xml【说明】实例EX4-7.xml中用<group>来形成嵌套结构,使元素Opponent在元素CnGame下能出现至少一次;元素Star在元素Opponent下能出现至少一次,而元素Coach在元素Opponent下出现有且仅有一次。四、模型组和模型组定义

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功