Xml基础详解和DTD验证
本篇文章是从曹胜欢的博客http://blog.csdn.net/csh624366188转载的 Xml基础详解 Xml:可扩展标记语言(ExtensibleMarkupLanguage,XML),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。 Xml的基本语法: 1任何的起始标签都必须有一个结束标签。 2可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<tag/>。XML解析器会将其翻译成<tag></tag>。 3标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如thisisasamplestring。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。 4所有的特性都必须有值。 5所有的特性都必须在值的周围加上双引号。 6.对于XML文档来说,<?处理指令必须要顶格写,前面不能有任何的空白。 7.XML元素可以具有属性,属性的形式为: 属性名=”属性值”,比如gender=”male” 属性值需要使用单引号或双引号括起来。多个属性之间使用空格分开。 8.通过样式,我们可以实现XML内容与展现形式的分离 9.XML的注释:<!--comments-->,注释不允许嵌套 10.在一个元素上,相同的属性只能出现一次。
注意以下几点: 1.XML中的每个元素都是成对出现的(有开始,有结束),<student></student>,XML中的元素嵌套关系要保持正确性,即先开始的标记要先结束,后开始的标记要后结束。 2.每一个XML文档都有且只有一个根元素(RootElement)。所谓根元素,就是唯一一个包含了其他所有元素的元素。 3.XML描述的是文档的内容与语义,而不是文档应当如何显示。 4.格式正规(wellformed)的XML文档。符合XML语法要求的XML文档就是格式正规的XML文档。 5.有效的(valid)XML文档。首先XML文档是个格式正规的XML文档,然后又需要满足DTD的要求,这样的XML文档称为有效的XML文档 6.#PCDATA(ParsedCharacterData),可解析的字符数据。
XML文件的验证机制——DTD 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。 DTD可被成行地声明于XML文档中,也可作为一个外部引用。 内部的DOCTYPE声明 假如DTD被包含在您的XML源文件中,它应当通过下面的语法包装在个DOCTYPE声明中: <!DOCTYPE根元素[元素声明]> 带有DTD的XML文档实例 <?xmlversion="1.0"?> <!DOCTYPEnote[ <!ELEMENTnote(to,from,heading,body)> <!ELEMENTto(#PCDATA)> <!ELEMENTfrom(#PCDATA)> <!ELEMENTheading(#PCDATA)> <!ELEMENTbody(#PCDATA)>]> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don'tforgetmethisweekend</body> </note> 以上DTD解释如下:!DOCTYPEnote(第二行)定义此文档是note类型的文档。 !ELEMENTnote(第三行)定义note元素有四个元素:"to、from、heading,、body" !ELEMENTto(第四行)定义to元素为"#PCDATA"类型 !ELEMENTfrom(第五行)定义from元素为"#PCDATA"类型 !ELEMENTheading(第六行)定义heading元素为"#PCDATA"类型 !ELEMENTbody(第七行)定义body元素为"#PCDATA"类型 外部文档声明 假如DTD位于XML源文件的外部,那么它应通过下面的语法被封装在一个DOCTYPE定义中: <!DOCTYPE根元素SYSTEM"文件名"> 这个XML文档和上面的XML文档相同,但是拥有一个外部的DTD:
[html]
view plain
copy
print
?
?
下面来看一下DTD在xml每一个模块中的定义: 在一个DTD中,元素通过元素声明来进行声明。 声明一个元素 在DTD中,XML元素通过元素声明来进行声明。元素声明使用下面的语法: <!ELEMENT元素名称类别> 或者<!ELEMENT元素名称(元素内容)> 空元素 空元素通过类别关键词EMPTY进行声明: <!ELEMENT元素名称EMPTY> 只有PCDATA的元素 只有PCDATA的元素通过圆括号中的#PCDATA进行声明: <!ELEMENT元素名称(#PCDATA)> 带有任何内容的元素 通过类别关键词ANY声明的元素,可包含任何可解析数据的组合: <!ELEMENT元素名称ANY> 带有子元素(序列)的元素 带有一个或多个子元素的元素通过圆括号中的子元素名进行声明: <!ELEMENT元素名称(子元素名称1)> 或者 <!ELEMENT元素名称(子元素名称1,子元素名称2,.....)> 相同的元素至少出现一次的声明 语法格式为:<!ELEMENTelement-name(child-name+)> 例: <!ELEMENTnote(message+)> 例中的+是指子元素message必须在被包含的note元素里出现一次或者多次。 相同的元素不出现或者多次出现的声明 语法格式为: <!ELEMENTelement-name(child-name*)> 例: <!ELEMENTnote(message*)> 例中的*是指子元素message能够在被包含的note元素里不出现或者出现多次。 属性 在DTD中,属性通过ATTLIST声明来进行声明。 声明属性 属性声明拥使用下列语法: <!ATTLIST元素名称属性名称属性类型默认值> 以下是属性类型的选项: 类型描述 CDATA值为字符数据(characterdata) (en1|en2|..)此值是枚举列表中的一个值 ID值为唯一的id IDREF值为另外一个元素的id IDREFS值为其他id的列表 NMTOKEN值为合法的XML名称 NMTOKENS值为合法的XML名称的列表 ENTITY值是一个实体 ENTITIES值是一个实体列表 NOTATION此值是符号的名称 xml:值是一个预定义的XML值 默认值参数可使用下列值: 值解释 值属性的默认值 #REQUIRED属性值是必需的 #IMPLIED属性不是必需的 #FIXEDvalue属性值是固定的 规定一个默认的属性值 DTD: <!ELEMENTsquareEMPTY> <!ATTLISTsquarewidthCDATA"0"> 合法的XML: <squarewidth="100"/> 在上面的例子中,"square"被定义为带有CDATA类型的"width"属性的空元素。如果宽度没有被设定,其默认值为0。 实体 实体是用于定义引用普通文本或特殊字符的快捷方式的变量。 实体引用是对实体的引用。 实体可在内部或外部进行声明。 一个内部实体声明 语法: <!ENTITY实体名称"实体的值"> DTD例子: <!ENTITYwriter"BillGates"> <!ENTITYcopyright"Copyright> 具体的url">XML例子: <author>&writer;?right;</author> 注释:一个实体由三部分构成:一个和号(&),一个实体名称,以及一个分号(;)。 一个外部实体声明 语法: <!ENTITY实体名称SYSTEM"URI/URL"> DTD例子: <!ENTITYwriterSYSTEM"具体的url"> <!ENTITYcopyrightSYSTEM"具体的url">XML 例子:<author>&writer;?right;</author> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |