`
qcyycom
  • 浏览: 189514 次
社区版块
存档分类
最新评论

Java程序员从笨鸟到菜鸟之(二十四)Xml基础详解和DTD验证

    博客分类:
  • java
阅读更多

 

Xml基础详解

Xml:可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

Xml的基本语法:

任何的起始标签都必须有一个结束标签。   

可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<tag/ >XML解析器会将其翻译成<tag></tag>。   

标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如this is a samplestring。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。   

所有的特性都必须有值。   

所有的特性都必须在值的周围加上双引号。

6.对于XML文档来说,<?处理指令必须要顶格写,前面不能有任何的空白。 

7. XML元素可以具有属性,属性的形式为: 

属性名=”属性值”,比如gender=”male” 

属性值需要使用单引号或双引号括起来。多个属性之间使用空格分开。 

8. 通过样式,我们可以实现XML内容与展现形式的分离 

9. XML的注释:<!-- comments --> ,注释不允许嵌套 

10. 在一个元素上,相同的属性只能出现一次。 

 

注意以下几点:

 1.XML中的每个元素都是成对出现的(有开始,有结束),<student> </student>,XML中的元素嵌套关系要保持正确性,即先开始的标记要先结束,后开始的标记要后结束。 

2. 每一个XML文档都有且只有一个根元素(Root Element)。所谓根元素,就是唯一一个包含了其他所有元素的元素。 

3. XML描述的是文档的内容与语义,而不是文档应当如何显示。 

4.格式正规(well formed)的XML文档。符合XML语法要求的XML文档就是格式正规的XML文档。 

5. 有效的(valid)XML文档。首先XML文档是个格式正规的XML文档,然后又需要满足DTD的要求,这样的XML文档称为有效的XML文档 

6. #PCDATA (Parsed Character Data),可解析的字符数据。 

 

 

XML文件的验证机制——DTD

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。   

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。 

内部的 DOCTYPE 声明

    假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在个DOCTYPE 声明中:

<!DOCTYPE根元素 [元素声明]> 

带有 DTD 的 XML 文档实例   

 <?xml version="1.0"?>   

<!DOCTYPE note [

<!ELEMENT note (to,from,heading,body)>   

<!ELEMENT to (#PCDATA)>   

<!ELEMENT from (#PCDATA)>   

<!ELEMENT heading (#PCDATA)>   

<!ELEMENT body (#PCDATA)> ]>   

<note>   

    <to>Tove</to>   

    <from>Jani</from>   

    <heading>Reminder</heading>   

    <body>Don't forget me this weekend</body>   

</note>   

以上 DTD 解释如下:!DOCTYPE note (第二行)定义此文档是 note 类型的文档。   

!ELEMENT note (第三行)定义 note 元素有四个元素:"tofromheading,body"   

!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型   

!ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型   

!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型   

!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型 

外部文档声明

假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:   <!DOCTYPE 根元素 SYSTEM "文件名">   这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:   

[html] view plaincopy
  1. <?xml version="1.0"?>     
  2.   
  3. <!DOCTYPE note SYSTEM "note.dtd">     
  4.   
  5. <note>     
  6.   
  7. <to>Tove</to>     
  8.   
  9. <from>Jani</from>     
  10.   
  11. <heading>Reminder</heading>     
  12.   
  13. <body>Don't forget me this weekend!</body>     
  14.   
  15. </note>   


这是包含 DTD 的 "note.dtd" 文件:   

[html] view plaincopy
  1. <!ELEMENT note (to,from,heading,body)>     
  2.   
  3. <!ELEMENT to (#PCDATA)>     
  4.   
  5. <!ELEMENT from (#PCDATA)>     
  6.   
  7. <!ELEMENT heading (#PCDATA)>     
  8.   
  9. <!ELEMENT body (#PCDATA)>  

 

 

下面来看一下DTDxml每一个模块中的定义:

在一个 DTD 中,元素通过元素声明来进行声明。   

声明一个元素   

在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:   

<!ELEMENT 元素名称 类别  

或者 <!ELEMENT 元素名称 (元素内容)>   

空元素   

空元素通过类别关键词EMPTY进行声明:   

<!ELEMENT 元素名称 EMPTY>   

只有 PCDATA 的元素   

只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:   <!ELEMENT 元素名称 (#PCDATA)>   

带有任何内容的元素   

通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:   <!ELEMENT 元素名称 ANY>   

带有子元素(序列)的元素   

带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:   <!ELEMENT 元素名称 (子元素名称 1)>   或者   <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> 

相同的元素至少出现一次的声明

 语法格式为: <!ELEMENT element-name (child-name+)>   

  <!ELEMENT note (message+)>   

例中的+是指子元素message必须在被包含的note元素里出现一次或者多次。 

相同的元素不出现或者多次出现的声明

语法格式为  

<!ELEMENT element-name (child-name*)>   

  <!ELEMENT note (message*)>  

例中的*是指子元素message能够在被包含的note元素里不出现或者出现多次。 

属性

在 DTD 中,属性通过 ATTLIST 声明来进行声明。  

声明属性   

属性声明拥使用下列语法:   

<!ATTLIST 元素名称 属性名称 属性类型 默认值  

以下是属性类型的选项:   

类型 描述   

CDATA 值为字符数据 (character data)   

(en1|en2|..) 此值是枚举列表中的一个值   

ID 值为唯一的 id   

IDREF 值为另外一个元素的 id   

IDREFS 值为其他 id 的列表   

NMTOKEN 值为合法的 XML 名称   

NMTOKENS 值为合法的 XML 名称的列表  

ENTITY 值是一个实体   

ENTITIES 值是一个实体列表   

NOTATION 此值是符号的名称   

xml: 值是一个预定义的 XML 值   

默认值参数可使用下列值:   

值 解释   

值 属性的默认值   

#REQUIRED 属性值是必需的   

#IMPLIED 属性不是必需的   

#FIXED value 属性值是固定的   

规定一个默认的属性值   

DTD:   

<!ELEMENT square EMPTY>   

<!ATTLIST square width CDATA "0">   

合法的 XML:   

<square width="100" />   

在上面的例子中,"square" 被定义为带有 CDATA 类型的 "width" 属性的空元素。如果宽度没有被设定,其默认值为。 

实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量。   实体引用是对实体的引用。   

实体可在内部或外部进行声明。 

一个内部实体声明

语法:   

<!ENTITY 实体名称 "实体的值">   

DTD 例子:   

<!ENTITY writer "Bill Gates">   

<!ENTITY copyright "Copyright >

具体的url">XML 例子:   <author>&writer;©right;</author>

注释一个实体由三部分构成一个和号 (&), 一个实体名称以及一个分号 (;)。 

一个外部实体声明

语法:   

<!ENTITY 实体名称 SYSTEM "URI/URL">   

DTD 例子:   

<!ENTITY writer SYSTEM "具体的url">   

<!ENTITY copyright SYSTEM "具体的url">XML 

例子: <author>&writer;©right;</author>

更多信息请查看 java进阶网 http://www.javady.com

分享到:
评论

相关推荐

    java程序员-从笨鸟到菜鸟.pdf

    java程序员-从笨鸟到菜鸟.pdf

    [网盘]java程序员由菜鸟到笨鸟.pdf

    ### Java程序员成长之路——从菜鸟到笨鸟 #### 一、引言 《Java程序员由菜鸟到笨鸟》是一本由曹胜欢编写的书籍,旨在帮助初学者掌握Java编程的基础知识,并逐步进阶至更高级的应用场景。本书不仅适合初学者作为...

    JAVA程序员 从笨鸟到菜鸟.pdf

    曹胜欢在《JAVA程序员 从笨鸟到菜鸟.pdf》中分享了他个人学习Java的经历,从迷茫到逐渐成长的过程。他强调了自学的重要性,并鼓励初学者不要怕走弯路,同时希望自己的经验可以帮助到同样在学习Java的初学者。 2. ...

    java程序员从笨鸟到菜鸟

    ### Java程序员从笨鸟到菜鸟 #### 一、开发环境搭建与基本语法 ##### 开发环境搭建 在开始Java的学习之前,首先需要搭建一个合适的开发环境。这通常涉及到以下步骤: 1. **JDK(Java Development Kit)安装**:...

    Java程序员由菜鸟到笨鸟学习文档

    Java程序员的成长之路是一个充满挑战与探索的过程,从初学者到熟练掌握各项技能,需要系统性的学习和实践。"Java程序员由菜鸟到笨鸟学习文档"就是这样一个旨在帮助初入Java世界的学习者逐步进阶的资源。它覆盖了从...

    《Java程序员-从笨鸟到菜鸟》PDF下载

    资源名称:《Java程序员-从笨鸟到菜鸟》PDF 下载资源目录:作者简介:..........................................................................................................................................

    [网盘]java程序员由菜鸟到笨鸟.pdf.2018_03_19

    以上内容只是《Java程序员由菜鸟到笨鸟》这本书中可能涵盖的部分知识点。对于初学者来说,系统地学习这些基础知识是非常重要的,因为它们构成了Java编程的基础,也是进一步学习高级主题的基石。希望这些内容能够帮助...

    [网盘]java程序员由菜鸟到笨鸟.pdf.2018_03_17

    根据提供的文件信息,“Java程序员由菜鸟到笨鸟”是一本旨在帮助初学者成长为合格Java开发者的书籍。本书作者为曹胜欢,发布日期为2018年3月17日。以下是从该书的标题、描述以及部分可能包含的内容中提炼出的关键...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案

    java游戏笨鸟

    《Java游戏:笨鸟》(也称为FlappyBird)是一款基于Java编程语言开发的简单游戏,旨在帮助初学者更好地理解和掌握Java编程基础。这款游戏的实现涉及了许多Java编程的关键概念和技术,下面将对这些知识点进行详细阐述...

Global site tag (gtag.js) - Google Analytics