1、囝亘中华人民共和国国家标准化指导性技术文件GBZ 2 1 025-20072007-06-29发布XML使用指南XML useP7s guide宰瞀粥鬻瓣警襻瞥篓发布中国国家标准化管理委员会仪1”GBZ 21025-2007前言引言1范围2规范性引用文件3术语和定义4标准的符合性原则5国际化和本地化原则6组件命名原则7命名空间使用原则8词汇表编写原则9类型、元素与属性的使用原则10版本与注释的使用原则11实例的编写原则12 XML解析器及其选择13应用开发过程14注册规程附录A(资料性附录)使用实例:附录B(资料性附录) 指定机构的有关信息参考文献目 次j,00,8n孙驰孙卯四帖拍刚 置GBZ
2、 21025-2007本指导性技术文件仅供参考。有关对本指导性技术文件的建议和意见,请向国务院标准化行政主管部门反映。本指导性技术文件的附录A和附录B为资料性附录。本指导性技术文件由中华人民共和国信息产业部提出。本指导性技术文件由中国电子技术标准化研究所归口。本指导性技术文件起草单位:中国电子技术标准化研究所、北京信息工程学院、万达信息技术公司、北京航天航空大学、方正电子技术公司。本指导性技术文件主要起草人:李宁、顾晓毅、林学练、王国印、吴志刚、赵菁华。GBZ 2 1 025-2007引 言本指导性技术文件规定了使用可扩展置标语言(XML)应该遵循的原则和注意事项,适用于XML应用的开发者、管
3、理者、使用者和其他关心XMI,使用的人员。在GBT 18793 2002信息技术可扩展置标语言(XML)10中,描述了可扩展置标语言(eXtensible Markup Language,XMI)。它是标准通用置标语言(Standard Generic Markup Language,SGMI。)的一个子集,其目的是使SGMI。文档在web应用中可以像HTML文档一样进行发送、接收和处理。为此,XML的设计力求易于实现,并能与SGML和HTML很好地互操作。它针对web应用,简化了一些sGML的不常用的内容。GBT 18793-2002所定义的XML是一组用来构造语义置标的规则集合,通过这些置
4、标文档的各个部分可按预先定义的语义结构组织起来并进行结构化验证。GBT 187932002的重点在于对以DTD为核心的XML本身的语法进行描述,并不包括Schema的内容,具体的使用方法在那里也少有涉及,这些将在本指导性技术文件中做出解释,以帮助XML的推广使用。本指导性技术文件还给出了部分使用XMI的例子。本指导性技术文件为设计一致性的、合理的DTD和Schema提供了一个指导性框架,将有助于更好地理解XML,重用XMI。组件,并达到良好的互操作性。本指导性技术文件的重点在于如何采用元语言标准和基础标准来定义应用标准,核心是行业应用词汇表的设计。在本指导性技术文件中,部分内容仅适用于Sche
5、ma或仅适用于DTD,将特别标出。未被特殊标出的部分两者都适合。另外为了查阅方便,本指导性技术文件的大部分条目标题直接采用了原则性陈述的形式。XML使用指南GBZ 2 1 025-20071范围本指导性技术文件给出了指导XML文档的编写的原则,包括标准的符合性原则,国际化和本地化原则,组件命名原则,命名空间使用原则,词汇表编写原则,类型、元素与属性的使用原则,版本与注释的使用原则,实例的编写原则,XMI。解析器及选择,应用开发过程和注册规程等内容。本指导性技术文件适用于XMl。的各类开发人员和使用人员。2规范性引用文件下列文件中的条款通过本指导性技术文件的引用而成为本指导性技术文件的条款。凡是
6、注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本指导性技术文件,然而,鼓励根据本指导性技术文件达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本指导性技术文件。GBT 19881 998信息技术信息交换用七位编码字符集(eqv 1SO 646:1991)GB 23121 980信息交换用汉字编码字符集基本集GBT 130001 信息技术 通用多八位编码字符集(UCS) 第一部分:体系结构与基本多文种平面(GBT 1300011993,idt 1S0IEC 106461:1993)GBT 14814 1993信息技术 文本和办公
7、系统 标准通用置标语言(-SGRMI)(idt ISO 8879:1986)GB 18030-2000信息技术 信息交换用汉字编码字符集 基本集的扩充GBT】839】(所有部分) 信息技术数据元的规范和标准化GBT 18793 2002信息技术 可扩展置标语言(XML)10(neq W3C RFC xml一19980210:1 998)3术语和定义GBT 18793-2002中确定的以及下列术语和定义适用于本指导性技术文件。31文档对象模型Document 0bject Model;DOMW3C制定的XMI。应用程序接口。它将XMI。文档表示成一个树形的结构。DOM规定了一系列编程指令,允许应
8、用程序多次访问并操作文档树的组件。32元数据metadata定义和描述其他数据的数据。33资源目录描述语盲Resource Directory Description Language;RDDL一种符合XHTMI格式的资源目录和描述,用于为用户提供目标资源的相关信息。34XHTMLW3C为HTMI制定的XMI。词汇表。GBZ 2 1 025-200735XML的简单API Sample API for XML;SAX为序列化存取XMI。文档信息所制定的一种接口。SAX处理器在处理XML文档的时候,随着遇见开、关标记和字符数据等内容,不断触发事件,调用应用程序(事件处理程序)处理,能够达到比较快
9、的速度和效率。36式样单stylesheet一套指令集合,主要用于规定XML文档显现格式,也可以将一个XMI文档转换成另一个文档。37XML组件XML componentXMI。元素、元素属性和XMI。词汇表的统称。38XML schemaSchema一种用于限定文档结构(如元素的顺序、出现次数、属性等)的机制,用于描述一类实例文档的结构。解析器可以根据schema来验证文档。本指导性技术文件中,用小写字母开头的schema统称这一概念,其中也包括DTD。用大写字母开头的Schema特指W3C制定的Schema标准(REcxmlschema一020010502 Part O2)。39XML命名
10、空间XML namespace为了解决命名冲突,为元素和属性命名引入的逻辑空间,是在XML文档中通过URI引用声明的,并采用限定性前缀将元素和属性与命名空间联系起来。3一10XML词汇表XML vocabulary在特定领域给特定用户群使用、有确定的功能的数据元集合以及数据模型,是表示一类文件的结构的schema的统称。311XML作品XML artifacts具有独立保存价值的各种XML数据,包括schema、式样单以及XMI实例文档等。312可扩展式样语言eXtensible Stylesheet Language;XSL由W3C组织制定的用于定义XMI,文档转换和显现的系列标准,包括:X
11、SLT、XPath、XSL FO三部分。313可扩展式样语言转换eXtensible Stylesheet Language Transformations;XSLT由W3C组织制定的用于转换XML文档的语言。314统一建模语言Unified Modeling Language;UML为创建商业和技术模型定义的一种语言和图形表示法,它定义了多种模型种类,涵盖了从功能需求定义、事务处理活动工作流模型到逻辑和物理层次等软件开发的各个方面。315上驼峰形式大小写Upper Camel Case;UCC把单词拼接在一起的一种方式,不使用含下划线“一”和句点“”等的连字符,每个单词的首字母大写,其余字母
12、均小写。在有大写缩写字母或数字的时候,后面的单词首字母小写。9GBZ 21025-2007例如:NameUsedInXMI。schema。316下驼峰形式大小写Lower Camel Case;LCCLCC与UCC的唯一区别是整个名称的首字母用小写,例如:attributeValue。317统建模方法Unified Modeling Methodology;UMMUNCEFACT为事务处理建模,支持下一代电子数据交换(Electronic Data Interchange,EDI)开发而推出的一套建议的方法。它基于Rational统一过程理论,使用UML作为建模语言。318Unicode由Un
13、icode协会(Unicode consotium)制定的通用字符。其主要目的是为纯文本内容提供一套无歧义的编码,以方便全球各种语言文字的转换。319统一资源定位符统一资源指示符统一资源名称 URL(Uniform Resource Locators)URI(Uni-form Resource Indicators)URN(Uniform Resource Names)网络环境下三种不同的,但又相关的引用资源的统一的方法。4标准的符合性原则所有XMI。文档的编制和所有的处理工具或处理器,包括解析器、文档生成器、验证工具,以及所有使用XMI的软件应符合GBT 18793 2002,同时也应该考虑
14、符合国际权威标准化组织订立的其他正式标准。对于标准未涉及到的,而应用中需要的对XMI。的扩充,原则上仅限于在组织内部使用,不宜公开传播,除非经过正式的审查和注册。5 国际化和本地化原则51 XML文档编码GBT 18793-2002规定,XML文档可以使用以下编码字符集:GB 18030 2000:GB 130001:GB 2312 1980:其他XMI。处理器支持的编码字符集。在GBT 18793 2002中,缺省字符集规定为GB 130001,亦称为通用字符集(Universal Character Set,UCS)。注:Unicode是由Unicode协会(Unicode Consotu
15、m)制定的通用字符集。其主要目的是为纯文本内容提供一套无歧义的编码,以方便全球各种语言文字的转换。在WaC的XMI,10中,大量使用了Unicode。其2004年发布的XMI,1 1中作了更新,使XMI。不再依赖于Unicode的特定版本。由于GBT 130001-1993与Unicode(20版本以上)是完全兼容的,本指南中除非特殊需要不涉及Unicode。在XMI,文档交换中经常用到UCS-4、ucS_2以及uTF一8、uTF 16等编码形式,简要介绍如下。UCS的双八位的BMP形式(ucS_2)规定每个字符用两个字节编码,这种形式仅适用于基本多语种平面。如“一”的双八位形式为4E00。U
16、CS的肆八位的正则形式(UCS一4)规定每个字符用四个字节编码,例如:汉字“一”的正则形式为0000 4E00。在UCS中,编码点在065535的字符归属第0平面,也称基本多语种平面(Basic MuhilingualPlane,BMP)。这个平面中包含大部分全世界正在使用的公用字符,包括来自罗马字母、西里尔字母、阿3GBZ 2 1 025-2007拉伯语、希腊语、希伯来语、常用汉字和其他语言的文字。编码点在65536131071的字符归属第1平面。这个平面包括音乐符号、数学符号和一些已经不再使用的语言(如古意大利语)的文字。编码点在131072196607的字符归属第2平面,收录了很多不常用
17、汉字。第14平面包含了一些语言标记,因为XMI。有xml:lang属性可用而完全不需理会这些标记。其他的平面至今都没有很好地定义。在实际使用中更多采用的是uTF 8和uTF一16。制定uTF 8的目的是为了与原8比特系统向下兼容;制定uTF一16的目的是为了向上发展和扩充。UTF一8(Unicode Transformation Format,8-bit encoding form)是一种变长编码。编码点为0127的每一个字符(GBT 1988 1998字符)占一个字节,编码点为1284095的每一个字符占据两个字节,第0平面的其他字符每一个占据3个字节,从第1至第15平面的每一个字符占据4个
18、字节。UTF一8有很多优点,列举如下:它是GBT 19881998的超集,因此对于纯英文的文本,一个uTF 8文件与GBT 19881998文件完全一样,非常利于兼容,因此XML把uTF一8选作缺省的编码形式。所有的GBT 19881998字符都不会成为其他字符编码的一部分,因此非常容易分辨GBT 1988 1998字符。uTF_8与字节顺序无关。在计算机系统中,大数值类型(如整型)使用多个字节表示,不同体系结构采用的字节排列顺序不同。其中,部分采用由高字节到低字节的排列顺序,称为bigendian;其他则采用由低字节到高字节的排列顺序,称little endian。对于大多数big endi
19、an的UNIX系统和littleendian的Windows系统对同一个文档uTF一8可以做到每个字符一一对应,因此,没有必要在XML文档开头放置字节顺序标记。从单一字节就可以判断字符边界。只观察单一字节,程序就可以判断该字节是下列哪种情形之一:单字节字符、双字节字符的第一个字节,三字节字符的第一、二、三字节。对于常见字符组成的文档,uTF一8占用空间最节省。uTF一1 6(Unicode Transformation Format,16 bit encoding form)也是一种变长编码。在UTF 16中,编码点为065535的字符使用单一的1 6位编码单元表示;而编码点为65536111
20、4111的字符使用一对1 6位编码单元表示(RCelement或surrogate pair)。UTF-16最大的好处是优化了基本多语种平面的字符表示,每个字符只需要2个字节,可作为定长编码来有效使用。对于大量使用中、日、韩文字的文本,其占用空间比UTF-8约节省13。然而比起uTF一8,UTF-16丧失了很多优点,最主要的是UTF一16是字节顺序相关的,为解决字节顺序问题,要在XML文档开头加一个字节顺序标志(#xFEFF)。如果程序读出的是FE和FF,则可以断定文档的编码是hig-endian uTF一16;如果读出的是FF和FE,则文档的编码是little endian uTF 16。由
21、于#xFEFF不是一个合法的GBT 13000字符,所以不会与其他内容混淆。uTF 16的另一个缺点是检测字符边界比较麻烦。除了uTF一8和uTF 16,GBT 130001还有uTF一32编码形式,与UCS一4一致。然而常用的只有UTF一8和UTFl 6。一般原则是,如果文档不含大量的中、日、韩文字,XML应该使用UTF 8作为缺省的编码,否则应该使用UTF一1 6。如果难以判断,仍可采用UTF 8。但是,除非特别必要,xML置标标记(包括元素名和属性名)应该尽量采用GBT 1 988 1998字符集,以适应当前很多工具对GB 130001和其他编码字符集支持不够完善的现况。尽量不要使用GB
22、 130001以外的字符集,如果确实必要应该考虑采用编码转换,将其他字符集编码映射到GB 130001再处理。注:在使用GBl3000的时候,应该遵照XMI,11标准的建议先将XMI。文本规格化。因为在GBl3000中,一些文本成分即可使用静态的预先组合好的形式,也可使用动态组合的形式。例如“”可以表达为单个字符“#xE9”,也可以表达为两个字符连用,即“#x65”和“#x301”。为了进行字符比较,需要进行规格化,即使用一种规范化的、单一的GBT13000文本形式来表示这些成分。Unicode定义了四种规范化形式:Normalization Form D(NFD),Normalization
23、 Form KD(NFKD),Normalization Form C(NFC)和Normalization Form KC(NFKC)。GBZ 21025-2007其中NFD和NFKD将可能的字符进行分解,而NFC和NFKC将可能的字符进行组合。XMLt1规定规范化的文本应该采用NFC的形式。52 URI字符集使用统一资源指示器(uRI)用于定位系统中的某项资源。统一资源定位器(URL)(较URI更为人所熟知)是URI的子集。XMI。通常使用URl指定链接中的资源,定义命名空间等。以往的URl基于GBT 1988 1 998的基本集,无法在URI中直接表示扩展字符,但可以通过转义机制来进行。
24、对于URI中的保留字符、空白字符以及其他不满足条件或非安全的字符(包括GBT 1 9881998中编码点127之后的字符、空白符、控制符,如“”、“”、“”、“、”、“”、“”、“”等)都应该编码成“h h,形式,其中,hh是该字符在字符集中的16进制的编号。以下是一个尚未编码的URI。例子:http:wwwcompanycorn中国转换后成为:http:wwwcompanycornE4B8ADE59BBDW3C和IETF正在制定基于GBT 13000的国际化的URI标准。在正式标准发布之前,仍然需要转义非安全的字符。53谨慎使用多语种文档多语种文档有两类:一类是在内容级别上使用多种语言,即元
25、素内容使用不同的语言,另一类是在结构级别上使用多种语言,即用不同语言表示一个元素。多语言文档不易处理,特别是后者,不易保持几种语言版本的一致性,不易为检索等应用建立等价元素关系,因而需要尽力避免使用多语言文档。如果确实需要,应该尽量采用工具进行转换,并通过标识符建立元素之问的关联。54 XML中多语种的使用除非在其他标准、规范或既定应用中明确规定了须使用其他语种,在XML的以下成分中可以使用中文:元素名和元素内容;属性名和属性值;枚举值;唯一标识符;记法(Notation);文本字符串。面向公共使用的词汇表应该首先准备一个语种的主版本。为了利于使用其他语种的地区和国家使用,可以将该词汇表主版本
26、翻译成其他语种的副版本,例如:由英文主版本翻译成中文或汉语拼音版本。建议通过一套XSI。式样单(stylesheet)或程序进行词汇表之间的转换。经过转换的词汇表应该通过注释指明原始词汇表的出处。另外,在词汇表的不同版本中,应该使用标识符(建议使用“loclD”)来标识等价的元素,并使用特定的属性(建议使用“attrl,ist”)来标识属性顺序,以利在一个词汇表的不同语种实例之间能仍然保持严格的元素和属性的语义关联,并方便XML检索等处理机制识别。这方面的一个实例见141。适用于Schema某些时候,也可采用元素替换(substitutionGroup)的方式,在一套Schema中指定多个语种
27、的等价元素或属性名称。例如:GBZ 2 1 025-2007这种方法要求Schema的编码方法可以编码各个所需的语种,而且XML处理器可以处理这样的编码。另外,substitutionGroup中的替换元素必须是全局的。它的优点是能够保证多个语种文档的一致性。通过Schema的命名空间可以建立多个版本的联系,例如:在DTD中,可以通过前导说明部分的DOCTYPE声明来建立联系:在进行词汇表语种转换的过程中,要注意妥善处理好命名空间的对应关系。XML注册机构最好能提供查询机制以方便检索同一词汇表的不同编码版本。55使用xml:lang整合语种声明明确指示文档内容(如时间、日期、货币符号和数字)所
28、使用的语言,可以有助于采用适合的显现式样,或正确地解释与语种无关的数据。所有与语种相关的元素或属性内容,均应使用该属性进行声明。对于schema中使用多语种元素的情况,应该为所有与方言相关的元素指定xml:lang属性。例如:zh 中文(简体);一一zhcrl中文中国(简体);zh hk中文一香港(繁体);zh 1310中文一澳门(简体);zh sg中文一新加坡(简体);zhtw中文台湾(繁体)。如果上述代码不能满足需要,可以经权威机构注册后加以扩充,如用“zh cn py”表示汉语拼音。56在内容中使用本地化属性为了便于本地化,需要规定一些用于本地化的属性,例如:translate:指明哪些
29、内容需要翻译;localize:指明是否需要做本地化处理;locID:为本地化应用建立元素的语义关联;10cNote:通过它给翻译人员提供为理解原文应查看的重要信息。例如,元素的内容可能既有可翻译的部分,也有不可翻译的部分,采用本地化属性可指明如下:指示“World Wide Web”不被翻译。GBZ 2 1 025-2007另外,在非XMI,文件中,也可使用类似的本地化机制,例如,在JavaScript中插入:57属性值中避免使用可翻译的文本属性值的翻译会带来一些问题。首先,指定属性的本地化信息十分困难;其次,属性没有显式的1D供等价的属性建立关联;再者,属性值中与语言相关的空白不易处理;另
30、外,元素xml:lang的作用域不覆盖属性值。58避免条件翻译在设计schema时,应避免使用这样的元素:其内容是否需要翻译取决于某个属性值、父元素或同级元素的内容以及其他条件。6组件命名原则61拼写规则所有的名称应该使用UCC规则(某些情况下,属性名称可采用LCC),而枚举值可以使用LCC规则。当然枚举值中的该有的大小写规则可不受此限制,例如“ChinaGNP”。62缩写规则可读性比起标记的长度更为重要,在元素、属性和类型名称中应尽量少用缩略语和首字母缩略语,除非这些缩略语已经为世人公认,或者在注册库中有明确的定义。例如:不要使用DptlD作为元素或属性的名称,而应该使用Department
31、ID。如果使用缩略语,应该通过注释给出其非缩写的形式。当然也要避免使用太长的名称。6 3通用化名称使用的限制在为全局(Global)元素或属性、枚举值命名时,除非它们确实是较高抽象级别上的概念,不要使用过于通用化的名称(例如:“Name”、“Address”等),应该把名称加上特定的上下文,使其更符合当前的含义(如“ReceiverName”、“EmailAddress”)。64用URI作为名称型数值的定义用URI来唯一标识某个名称,可给它赋予更准确的内涵(这种内涵可以在专门的文档中详细描述)。例如:用“http:wwwbooksorg70wner”来为个“Owner”角色命名。65避免发明新
32、名称在为元素、属性、枚举值命名时,必须使用标准或其他规范中定义的标准名称,或者是其他外部标准文档中定义的词汇,尽量少创造新的名称。在schema中使用到的外部词汇也必须在注册库中注册。如果必须创造新的名称(元素、属性、类型、枚举值等的名称),这些名称必须在行业领域专家的指导下定义,应该经过各方用户同意,并在注册库中注册。对于DTD中的实体引用的命名,也应避免随意使用新的名称,应该首先考虑使用GBT 14814等标准给出的实体名称。66尽量重用已有组件schema的制定者应尽量使用在注册库中已经定义好的标准组件(例如:元素、属性、类型等),避免制定新的雷同标准。因此,在制定schema之前,应该
33、先检索注册库,看是否有可用组件存在。如果使用了注册库之外的其他标准化组织的XMI,schema,也应该把它们注册到注册库中。可使用(include)或来重用已有的组件。也可使用schema的继承机制通过扩展已有的元素类型来定义新的元素,以提高设计效率。7GBZ 2t0252007为了方便重用,每个单一的schema不宜太大。在schema设计中,如果多次用到相同的类型、元素结构、内容模型片断、属性组合等,应该将它们定义成命名的全局类型、元素、模型组和属性组,并使用通用的名称来命名。类型的定义应考虑如何方便后续的重用。67 XML组件的命名XML组件的命名应该遵循GBT 18391的规定:XML
34、元素和属性名称以及XML数据类型名称都应遵从GBT 18391相应的命名方法。另外,GBT 18391的名称需要经过适当转换才能用于XML组件命名,即除了要去除空格和分割点之外,还需将名称转换成UCC的形式。简单数据类型的名称应以“类型”或“Type”结尾,复杂数据类型的名称应眺“结构”或“Structure”结尾,以区别简单类型、复杂类型和元素。 。68元素和属性的名称应不依赖显现元素的名称应该反映逻辑语义,而不是其显现形式。合适的名称将有助于正确理解文档并对其作适当处理。例如:l(LightThis text is(I。ight)(Bold)important(Bold(Paragraph
35、这种表示方法就不如:f(Paragraph)This text is,这会导致Schema难以调试和更新。76适用于Schema隐藏或暴露命名空间的准则通过将elementFormDefault设置为unqualified或qualified,可以实现对命名空间的隐藏或暴露。但由于全局元素是不能隐藏命名空间的,因此,如果想通过etementFormDefauh作为暴露或隐藏命名空间的“开关”,则应尽量少用全局元素。当实例文档的简洁性和可读性是第一位的时候,最好隐藏命名空间。因为元素附加的命名空间信息会给不熟悉XML的用户带来困惑。另外,当需要Schema有一定的灵活性,即要求对Schema的某
36、些改动不影响实例文档的情况下,也可以通过隐藏命名空间来做到。例如,将原先外部命名空间定义的元素改为在schema内部定义(inline方式),这时,采用隐藏命名空间的方式就不需要改动实例文档。当实例文档需侧重考虑元素的拥有承袭关系的时候(如版权的需要),最好使用暴露的命名空问。另外,当元素同名不同义的时候,需要暴露命名空间以消除歧义。再有,当元素的处理需要命名空间的知识作辅助的时候,也应暴露命名空间。在应用中,通常将elementFormDefauh设置为qualified,将attributeFormDefauh设置为unqualifled。根据命名空间规范,没有命名空间限定的属性并不是缺省
37、地属于其元素的命名空间,所以需要时应该显式地(explicitly)在属性前使用命名空间。77正确设计命名空间命名空间的设计大致有三种方法:方法1:多个schema中有一个“主”schema,其他的为辅助schema。只指定主schema的targetNamespace。例如:如果某些schema仅包含类型定义而不含元素定义,则那些schema最好定义成上述不带targetNamespace的辅助schema。方法2:所有schema用一个targetNamespace。如:GBZ 21025-2007这种设计适合下列情况:所有的schema在逻辑上是紧密相关的;实例文档中没有必要显式区分元素
38、和属性的来源及其关联,亦即不需要对元素或属性划分类别。方法3:所有的schema都有不同的targetNamespace。如:这种设计适合下列情况:当有多个元素具有相同的名称,为防止名称冲突;实例文档中有必要显式区分元素和属性的来源及其关联。78适用于Schema未定因素尽量靠后处理不要把所设计的Schema硬性作为“targetNamespace”,一开始可考虑设计没有“targetNamespace”的Schema,而让Schema的用户来决定对于具体应用应该用什么“targetNamespace”,应将Schema和targetNamespace的绑定尽量延后。如果要导人(import)
39、带有命名空间的Schema,先不要硬性指定它。例如,假定有一个声明的元素使用了另一个命名空间的类型,即:(xsd:element flame=“MyElement”type一“n:MyElementType”),其中MyElementType来自于需要(import)的另一个命名空间。而一旦指定了(import)的schemaI。ocation属性,意味着定义MyElementType的命名空间被严格确定了。但是,实际上没必要这样做。如果在Schema中不指定schemaI。ocation,而让实例文档的作者来指定MyElementType所在的Schema,会提高Schema的动态适应能力。
40、因此,可以把类型引用和类型定义之间的绑定留到最后时】0刻在验证Schema之前来确定。8词汇表编写原则GBZ 21025-200781 DTD到Schema的过渡文件类型定义(DTD)用来描述一个特定目的的置标语言(词汇表),亦即定义一类文档的整体结构以及语法。DTD源于SGMI。,是XMI。10标准的重要组成部分。DTD有很强的形式化特点,结构精简,但由于DTD采用非XMI。的语法规则,数据类型不丰富,扩展性较差等等,目前,越来越多的词汇表采用Schema来描述(包括W3C以外的Schema)。Schema本身是XM。的一种应用,它使用XML语言来定义DTD的内容,充分发挥出XMI自描述性的
41、优势。与DTD相比,W3C Schema具有一致性、扩展性、易用性、规范性和可互换性等优点。因此,文档词汇表的编写应该尽量使用W3C Schema。但是,由于DTD是XMI。10标准所支持的,历史较早、存在大量的应用,今后在相当长的时间内,应该允许DTD和Schema并存,XMI,的处理工具应该能够同时支持这两者。而在新建词汇表的时候,以及将已有DTD更新的时候,建议逐渐过渡到Schema的形式。82尽量使用W3C Schema除了W3C制定的Schema,还存在多种schema,例如:DTD、REIAx NG、Schematron等。它们各自都有优缺点。但是,为了方便信息共享,最好仅使用一种
42、schema。一般情况下,XMI。应用应该尽量使用W3C Schema和DTD。83尽量使用简单的schema语法XMI。DTD和Schema都提供了强大而灵活的功能。要描述一类文档,schema可能很简单,也可能很复杂。而大多数schema的用户可能都不是XMI。方面的专家,因此应尽量使用最简单的语法来描述文档,尽量不采用schema中不常用的机制,这对文档验证也有好处。因为有些验证工具不支持不常用的东西。84 XML文档的设计要反映信息的结构置标语言的初衷是将文档的内容和表现形式分离。文档的内容最为人们所关心,需要能够定义文档的逻辑结构(信息模型),验证一个具体的文档正确与否,能够检索特定
43、的文档组成部分,或者将文档的部分或全部进行传送。这些都是XMI。所擅长处理的。而与XMI。文档的结构相比,文档表现形式或文档用途是易变的。DTD和Schema的设计要着重反映文档的逻辑结构,而不是文档的显现与处理。85文档的XML粒度一个文档的XMI。粒度(即XMI。置标文档内容彻底与否)取决于该类文档信息建模的粒度。例如,对于一个通过三维图形交互的应用,XML应该能够描述该图形中的各个对象,即需要schema能够描述图形元素,因而XML文档中需要加入类似SVG的代码。而对于产品图录这样的应用来说,一般不需要对图形进行刻画和理解,因而可以将图形数据转换成二进制数据插入到XMI。文档之中。对于数
44、据建模不关心的部分尽可以使用CDATA机制或通过链接外部资源来处理。类似的情况还包括表格、代码和各种多媒体对象。一般来说。将一个文档的结构分解过细的结果要好于分解过粗,因为对于经过置标的文档结构如果不需要处理细节,可以直接处理父元素或祖先元素节点,或合并子元素,不会有什么问题。但是对于分解不彻底的置标文档结构,如果需要处理细节就会很困难。86尽量由词汇表来规定XML文档的合法性元素的各种关系、数据类型、取值范围等应该尽量使用schema来规定。有些内容schema确实无法表达时,才求助予外部应用程序。87 采用XSLT和其他schema来表达事务处理规则W3C Schema并不适合表达复杂的事
45、务处理规则,可以考虑通过以下三种途径来解决:11GBZ 2 1 025-2007采用其他的schema,如Schematron;编写脚本代码表达附加的限定;将限定规则表达为XSLTXPath式样单。这种情况下,采用schema检验尽量多的限定条件,而采用式样单检验其余的限定条件。如果schema的有效性验证工具和XSL处理器都产生正确的结果,则实例文档是有效的。88尽量提高词汇表的可读性schema不仅用来验证XMI,文档,更是一种严谨的信息交流机制,系统开发人员往往需要通过阅读schema来全面理解和使用XML文档,因此必须尽可能地提高schema的可读性。例如:在名称中尽量少用缩略语。枚举
46、数值也应该使用名称,而不是数值。元素和属性的命名规则同样适用于枚举值。避免使用元素或属性的缺省值。使正则表达式具有更好的可读性,例如:使用“o一9”,而不是“d”。避免使用xsd:redefine,以避免重用组件的副作用,提高透明性和可读性。89词汇表应尽量做到与应用程序无关schema的任何地方都不应存放与特定处理程序相关的配置信息,例如:sQL语句片断、调用函数名称等。这样做会妨碍XML在异构系统中的使用。schema的设计应该尽量使之能用于多种应用场景。810不宜使用处理指令来表达数据信息尽管XML处理指令(Processing Instructions)提供了一种控制程序的捷径,但它毕
47、竟只能针对特定的程序,不利于在程序间交换。而且它不能使用标准的XML语汇来表达信息,即处理指令的内容是不能由Schema来规定的。处理指令应该仅限于局部的个别的处理,处理指令不应与文档内容联系紧密,作为单一指令也不应有结构性的扩展。在考虑使用处理指令之前,应首先考虑使用元素置标。811使XML文档具有可扩展性在很多情况下,标准化的XML文档的更新速度远远慢于现实的变化。因此,经常会发生在XML文档中写入了新元素,而这些元素还没有被相应标准正式承认的情况。schema的设计要容纳开放的内容,即在实例文档中允许包含schema没有声明的内容。可以使用any和anyAttribute来容纳未知的元素和属性,提高schema的可扩展性。在Schema中使用(any时,要注意避免在实例文档中出现非确定性内容模型。例如,假设有以下schema对于如下实例文档GBZ 21025-2007(Book)(Title)XMI。手册(Title)(AuthorGoldfarb,HF(Author)(Date)20037-5053 85550(Publisher)电子工业出版社(Book)有效性验证工具在读入”是否出现来表示。这样有助于理解。910适用于Schema尽量少用“derive-by-restriction”在面向对象的程序设计中,人们已经广为接受了类的继承的概念。但是在设计Sche