XML知识点滴(5)
(引用文章,版权归作者,如需删除请联系我)
行尾处理
n XML数据经常以文本的方式保存在计算机文件中,以行来分隔。然而,不同的计算机系统采用的行分隔符是不同的。在XML空白字符中,有两个是标准的ASCII码行尾控制字符:回车(CR,#xA)和换行(LF,#xD)。在Windows平台下,采用#xD#xA的组合作为行分隔符,而Linux、Unix系统则采用#xA作为行分隔符,在MacOS下,采用#xD作为行分隔符。
n 为了简化应用程序的工作,XML处理器在解析前,要将所有的两个字符序列#xD#xA,以及单独的#xD字符转换成单个的#xA字符。
语言标识
n 在文档处理中,标识出其内容所使用的自然或人工语言常常是很有用的。
n 可以在文档中插入一个特殊的属性xml:lang,来指出XML文档中任何元素的内容和属性的值所使用的语言。在有效的文档中,这个属性和其他任何属性一样,在使用时必须声明。
n xml:lang属性的值是在IETF RFC3066(Tags for the Identification of Language)或它的后续版本中定义的语言标识符,另外,也可以为其指定空字符串。例如:
<content xml:lang=”en”>This is English</content>
<content xml:lang=”zh”>窗前明月光</content>
n 属性xml:lang所指的语言适用于它所在元素的所有属性及元素内容,除非被该元素内容中的另一个元素的xml:lang的实例所覆盖。我们可以为一个子元素的xml:lang属性赋一个空值,来覆盖其父元素上的xml:lang属性设置。在该子元素内,将没有可用的语言信息,就好象在它自身及其祖先元素(父元素、父元素的父元素等等)上没有指定xml:lang属性一样。
n xml:lang的一个简单声明可以采用如下形式:
xml:lang NMTOKEN #IMPLIED
不过,如果合适的话,也可以给出指定的缺省值。在一本供英国学生使用的法文诗歌集中,注解(gloss)和笔记(note)使用英语,xml:lang属性可以声明如下:
<!ATTLIST Poem xml:lang NMTOKEN ‘fr’>
<!ATTLIST gloss xml:lang NMTOKEN ‘en’>
<!ATTLIST note xml:lang NMTOKEN ‘en’>
格式良好的XML
n 如果一个XML文档有且只有一个根元素,符合XML元素嵌套规则,满足XML规范中定义的所有格式正确性的约束,并且在文档中直接或间接引用的每一个已分析实体都是格式正确的,我们称这个文档是一个格式良好(well-formed)的XML文档。
n 为什么格式良好的XML是如此重要呢?主要是因为:
1) 可以创建没有DTD的XML文档,便于利用XML文档做数据的交换。
2) XML的处理器可以做的很小很快,从而应用于手持设备,例如:PDA、手机等存储容量较小的设备中。
n 如果一份XML文档通过了DTD 或Schema的验证,则称其为有效的(Valid)。
DTD
n DTD(Document Type Definition),文档类型定义。是用于描述、约束XML文档结构的一种方法。
n 在XML标准中,描述了如何创建DTD,以及如何将它与根据它的规则所编写的XML文档相关联,并且还定义了XML处理器应该如何对DTD进行处理。有了DTD就可以检测XML文档的结构是否正确。
n DTD为XML文档的编写者和处理者提供了共同遵循的原则,使得与文档相关的各种工作有了统一的标准。
在XML文档中引入DTD
n 通过在XML文档中包含文档类型声明,来建立当前文档和DTD的关联。当进行有效性验证的XML处理器读到该指令时,它获取DTD,并根据其中定义的规则对文档进行检验。文档类型声明必须位于XML声明之后,且在根元素(文档元素)之前。不过,在XML声明和文档类型声明之间可以插入注释和处理指令。
n 我们可以直接在XML文档中定义DTD,也可以通过URI引用外部的DTD文件,或者同时采用这两种方式。
内部DTD
n 文档类型声明由<!开始,后面紧跟一个关键字DOCTYPE,然后文档根元素的名称,接下来是标记声明块,标记声明块是放在左中括号([)和右中括号(])之间的,由一个或多个标记声明构成,最后由>结束。
<?xml version=”1.0” encoding=”gb2312” standalone=”yes”?>
<!DOCTYPE greeting[
<!ELEMENT greeting(#PCDATA)>
]>
n 在DTD中,所有的关键字都是大写的。不过,在DTD中定义的元素和属性的大小写是可以任意指定的,但是要注意,因为XML文档是大小写相关的,所以一旦给一个元素命名,那么在整个文档中要使用相同的大小写。例如:greeting和Greeting是两个不同的元素名。
n 在XML文档中定义DTD,比较直观,修改也比较方便,而且不用担心XML处理器找不到DTD,但是它也有一些缺点:
1) 在文档中定义DTD会导致文档本身的长度增加,在传输数据时,即使不需要验证文档的有效性,这些声明也会随着文档一起传输。
2) 如果多个XML文档要共用一个DTD,我们就需要在每一个文档中加如DTD,这是相当繁琐的。
外部DTD
n 在文档类型声明时,用关键字SYSTEM或PUBLIC来指出外部DTD文件的位置。使用SYSTEM关键字的声明语法如下:
<!DOCTYPE 根元素的名字 SYSTEM “外部DTD文件的URI”>
SYSTEM关键字表示文档使用的是私有的DTD文件,“外部DTD文件的URI”可以是相对URI或绝对URI,相对URI是相对于文档类型声明所在文档的位置。“外部DTD文件的URI”这部分也被称为系统标识符(system identifier)。下面是使用一个外部DTD文件的例子:
<!DOCTYPE greeting SYSTEM “hello.dtd”>
n 如果位于不同位置的多个XML文档要使用同一个DTD,我们可以使用绝对URI来指明DTD文件的地址。假定hello.dtd位于http://localhost/xml/hello.dtd,可以在文档类型声明中使用URI:
<!DOCTYPE greeting SYSTEM “http://localhost/xml/hello.dtd”>
如果引用DTD的XML文档与DTD文件在同一个Web服务器上,我们也可以使用相 对URL:
<!DOCTYPE greeting SYSTEM “/xml/dtds/hello.dtd”>
<!DOCTYPE greeting SYSTEM “/dtds/hello.dtd”>
<!DOCTYPE greeting SYSTEM “../hello.dtd”>
上面的三种形式都是允许的。
n 使用PUBLIC关键字的声明语法如下:
<!DOCTYPE 根元素的名字 PUBLIC “DTD的名称” “外部DTD文件的URI”>
PUBLIC关键字用于声明公共的DTD,并且这个DTD还有一个名称,“DTD的名称”也称为公共标识符(public identifier)。这个DTD可以存放在某个公共的地方,XML处理程序会根据名称按照某种方式去检索DTD,如果XML处理器不能根据名称检索到DTD,就会使用“外部DTD文件的URI”(系统标识符)来查找该DTD。
n DTD名称与XML名称略有不同,它们只能包含ASCII字母和数字字符、空格、回车符、换行符和一些标点符号:-‘()+,./:=?!*#@$_%。
n 公共DTD名称要遵守一些约定。如果一项DTD是ISO标准,它的名称要以字符串“ISO”开始。如果是一个非ISO的标准组织批准的DTD,它的名称以加号(+)开始。如果不是标准组织批准的DTD,它的名称以连字符(-)开始。这些开始字符或字符串后接双斜杠(//)和DTD所有者的名字,之后是另一个双斜杠和DTD描述的文档类型,接着又是一个双斜杠后接ISO 639语言标识符,如EN表示英语,ZH表示中文。在http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt处有完整的ISO639标识符。
n 例如我们定义的人力资源DTD可以采用下面的命名:
-//BEER//DTD HR 1.0//ZH
连字符(-)表示这个DTD不是由任何标准组织批准的,为BEER所有,描述的是人力 资源管理,用中文编写。完整的文档类型声明如下:
<!DOCTYPE HR PUBLIC “-//BEER//DTD HR 1.0//ZH” “http://localhost/xml/dtds/hr.dtd”>
n HTML网页的文档类型声明,如下:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”
“http://www.w3.org/TR/html4/strict.dtd”>
n W3C公布的在Web文档中使用的有效的文档类型声明列表可以在
http://www.w3.org/QA/2002/04/valid-dtd-list.html上找到。
n 文档类型声明与文档类型定义不是一个概念,DTD是文档类型定义(Document Type Definition)的英文缩写。<!DOCTYPE greeting SYSTEM “hello.dtd”>是文档类型声明,<!ELEMENT greeting(#PCDATA)>这种语法是文档类型定义。文档类型声明可以包含(内部DTD子集)或引用(外部DTD子集)一个文档类型的定义,但文档类型定义从不包含文档类型声明。
n 在前面我们提到,如果我们的文档不依赖于外部文档,在XML声明中,可以通过standalone=”yes”来声明这个文档是独立的文档。如果文档依赖于外部文档,可以通过standalone=”no”来声明。当我们使用外部DTD文件时,就需要将属性standalone的值设置为“no”。
n 在实际应用中,很少使用standalone属性,它的主要用途是作为XML处理器和其他应用程序的标志,表示是否需要获取外部内容,如果文档依赖于外部文档,即使我们不使用standalone属性,XML处理器也能够很好地进行处理。
DTD的结构
n DTD的结构一般由元素类型声明、属性列表声明、实体声明、记号(notation)声明等构成。一个典型的文档类型定义文件会把将来所要创建的XML文档的元素结构、属性类型、实体引用等预先进行定义。
分享到:
相关推荐
margin: 5px; } ``` 此外,关于“颜色、大小等问题”,通常指的是如何使用CSS来调整元素的颜色、大小等属性。例如,调整字体大小可以通过`font-size`属性完成,而调整颜色则可以通过`color`或`background-color`等...
### Eclipse SWT开发点滴 #### 一、第三方包的引用 在使用Eclipse进行SWT开发时,经常会遇到需要引入第三方库的情况。以下是引入第三方库的具体步骤: 1. **工程项目增加Libraries** - 右键点击项目 -> `Build ...
"Oracle知识点滴"显然是一份汇聚了关于Oracle数据库关键概念和技术的资料,适合Oracle用户进行学习和参考。以下是根据标题、描述以及文件名所推测的一些关键知识点: 1. **Oracle数据库架构**:Oracle数据库采用...
而“心梓知识”可能是指该源码包含了关于心理健康或情绪管理的知识分享,为用户提供更全面的服务。 总的来说,这份源码资源涵盖了前端网页开发的多个方面,从基础的HTML结构到复杂的JavaScript交互,再到可能涉及的...
### Spring in Action 学习点滴知识点总结 #### 第二章:装配Bean 1. **`<ref>`标签中的`bean`、`local`、`parent`三个属性的区别** - `bean`属性用于指向一个具体的bean实例。 - `local`属性用于表示本地bean...
5. **NoteBook.xml**:这是NoteBook的另一个XML文件,可能存储用户的笔记数据或应用程序的设置。 6. **skin**:这可能是一个文件夹,包含NoteBook的皮肤或主题,用户可以更改界面外观。 7. **lib**:这个文件夹可能...
5. **NoteBook.xml**:与AD.xml类似,可能是另外一份XML格式的配置或数据文件,用于存储NoteBook的相关信息。 6. **lib**:这是一个目录,通常包含额外的库文件或资源,可能包含了NoteBook需要的其他组件。 7. **...
默认监听端口为8080,可通过修改`conf/server.xml`配置文件来更改。 #### 结语 Java的学习之路既漫长又充满乐趣,从理解JDK的基本构成到掌握应用服务器的配置,每一步都是对编程技能的提升。希望以上分享能够帮助...
5. **XML布局**:用于定义用户界面的结构和样式。 6. **SQLite数据库**:Android内置的轻量级数据库,用于持久化数据。 7. **ContentProvider**:如果需要在不同应用之间共享数据,ContentProvider是标准接口。 8. *...
在安卓(Android)平台上,开发一个便签应用是常见的任务,它可以帮助用户快速记录生活、工作中的点滴。本文将深入探讨“安卓Android源码——便签软件.zip”中包含的知识点,带你理解如何构建一个基本的便签应用。 ...
这篇文档包含了六篇程序员实习日记,记录了一位实习生在2020年期间学习和工作的点滴,主要涉及Java编程、开源框架、数据库管理和Web应用开发等主题。以下是这些日记中提炼出的重要知识点: 1. **Java编程框架**:...
QQ发表说说功能框是QQ社交平台上的一个重要组成部分,它允许用户分享心情、想法或生活点滴,与好友进行互动。实现这一功能涉及到前端界面设计、后端数据处理以及用户交互等多个方面的技术。以下是对这个功能框背后的...
【部分内容】中的第一篇文章讲述了主人公在生活中感到忙碌和压力,但在生日那天得到了家人的惊喜,从而意识到幸福就存在于日常生活的点滴之中。第二篇文章通过与爷爷下棋的情景,展现了亲情的温暖和陪伴带来的幸福感...
这种系统提供了一种便捷的方式,让人们能够分享思想、观点、专业知识或者生活点滴,无需深入学习编程技术。博客引擎是博客系统的核心组成部分,它负责处理用户的交互、内容管理、模板渲染和权限控制等功能。 在...
5. **SQLite数据库操作**:通过SQLiteOpenHelper类创建数据库和表,并使用ContentProvider或者SQLiteDatabase对象进行插入、查询、更新和删除等数据库操作。 6. **Intent通信**:在Android中,Intent用于启动新的...
5. **同步与备份**:支持本地和云同步,确保数据安全,方便多设备间的信息共享。 6. **密码保护**:提供密码保护机制,确保私人信息的安全。 7. **导入导出**:兼容多种格式,如TXT、HTML、XML等,便于与其他应用...
在Android平台上,开发一款记事本应用是一项基础且常见的任务,可以帮助用户记录日常生活中的点滴信息。这个名为"DateNote"的APP就是你自己使用Android Developer Tools(ADT)编写的成果,它展示了Android应用开发...
5. **权限管理**:Android应用需要在Manifest.xml文件中声明所需的权限,比如调用照相机的`<uses-permission android:name="android.permission.CAMERA" />`。在运行时,应用还需要请求用户的许可才能访问这些敏感...
在Android平台中,开发一款记事本应用程序是一项基础且实用的任务,它能够帮助用户记录生活中的点滴、工作中的想法或是学习笔记。本教程将深入探讨如何使用Android Studio进行记事本应用的开发,以"Jishiben.rar...
5. **权限管理**:如果应用需要访问外部存储或者发送推送通知,就需要在AndroidManifest.xml中声明相应的权限。 6. **事件处理**:在Android中,通常使用Listener接口来响应用户操作,例如点击事件、触摸事件等。...