`

XML知识点滴(5)

阅读更多

XML知识点滴(5)

(引用文章,版权归作者,如需删除请联系我)

 

行尾处理

n         XML数据经常以文本的方式保存在计算机文件中,以行来分隔。然而,不同的计算机系统采用的行分隔符是不同的。在XML空白字符中,有两个是标准的ASCII码行尾控制字符:回车(CR#xA)和换行(LF#xD)。在Windows平台下,采用#xD#xA的组合作为行分隔符,而LinuxUnix系统则采用#xA作为行分隔符,在MacOS下,采用#xD作为行分隔符。

n         为了简化应用程序的工作,XML处理器在解析前,要将所有的两个字符序列#xD#xA,以及单独的#xD字符转换成单个的#xA字符。

 

语言标识

n         在文档处理中,标识出其内容所使用的自然或人工语言常常是很有用的。

n         可以在文档中插入一个特殊的属性xml:lang,来指出XML文档中任何元素的内容和属性的值所使用的语言。在有效的文档中,这个属性和其他任何属性一样,在使用时必须声明。

n         xml:lang属性的值是在IETF RFC3066Tags 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)        可以创建没有DTDXML文档,便于利用XML文档做数据的交换。

2)        XML的处理器可以做的很小很快,从而应用于手持设备,例如:PDA、手机等存储容量较小的设备中。

n         如果一份XML文档通过了DTD Schema的验证,则称其为有效的(Valid)。

 

 

DTD

n         DTDDocument Type Definition),文档类型定义。是用于描述、约束XML文档结构的一种方法。

n         XML标准中,描述了如何创建DTD,以及如何将它与根据它的规则所编写的XML文档相关联,并且还定义了XML处理器应该如何对DTD进行处理。有了DTD就可以检测XML文档的结构是否正确。

n         DTDXML文档的编写者和处理者提供了共同遵循的原则,使得与文档相关的各种工作有了统一的标准。

 

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文档是大小写相关的,所以一旦给一个元素命名,那么在整个文档中要使用相同的大小写。例如:greetingGreeting是两个不同的元素名。

n         XML文档中定义DTD,比较直观,修改也比较方便,而且不用担心XML处理器找不到DTD,但是它也有一些缺点:

1)        在文档中定义DTD会导致文档本身的长度增加,在传输数据时,即使不需要验证文档的有效性,这些声明也会随着文档一起传输。

2)        如果多个XML文档要共用一个DTD,我们就需要在每一个文档中加如DTD,这是相当繁琐的。

 

外部DTD

n         在文档类型声明时,用关键字SYSTEMPUBLIC来指出外部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”>

       如果引用DTDXML文档与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名称要遵守一些约定。如果一项DTDISO标准,它的名称要以字符串“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文档的元素结构、属性类型、实体引用等预先进行定义。

分享到:
评论

相关推荐

    css 知识点滴 希望对你们有帮助

    margin: 5px; } ``` 此外,关于“颜色、大小等问题”,通常指的是如何使用CSS来调整元素的颜色、大小等属性。例如,调整字体大小可以通过`font-size`属性完成,而调整颜色则可以通过`color`或`background-color`等...

    Eclipse SWT开发点滴

    ### Eclipse SWT开发点滴 #### 一、第三方包的引用 在使用Eclipse进行SWT开发时,经常会遇到需要引入第三方库的情况。以下是引入第三方库的具体步骤: 1. **工程项目增加Libraries** - 右键点击项目 -&gt; `Build ...

    oracle知识點滴

    "Oracle知识点滴"显然是一份汇聚了关于Oracle数据库关键概念和技术的资料,适合Oracle用户进行学习和参考。以下是根据标题、描述以及文件名所推测的一些关键知识点: 1. **Oracle数据库架构**:Oracle数据库采用...

    梦颜时光记录点滴心情经历网站html源码源码资源下载整理.zip

    而“心梓知识”可能是指该源码包含了关于心理健康或情绪管理的知识分享,为用户提供更全面的服务。 总的来说,这份源码资源涵盖了前端网页开发的多个方面,从基础的HTML结构到复杂的JavaScript交互,再到可能涉及的...

    NoteBook笔记本,欢迎使用

    5. **NoteBook.xml**:这是NoteBook的另一个XML文件,可能存储用户的笔记数据或应用程序的设置。 6. **skin**:这可能是一个文件夹,包含NoteBook的皮肤或主题,用户可以更改界面外观。 7. **lib**:这个文件夹可能...

    NoteBook这个版本太旧了,用上面新的吧

    5. **NoteBook.xml**:与AD.xml类似,可能是另外一份XML格式的配置或数据文件,用于存储NoteBook的相关信息。 6. **lib**:这是一个目录,通常包含额外的库文件或资源,可能包含了NoteBook需要的其他组件。 7. **...

    Java学习心得知识积累

    默认监听端口为8080,可通过修改`conf/server.xml`配置文件来更改。 #### 结语 Java的学习之路既漫长又充满乐趣,从理解JDK的基本构成到掌握应用服务器的配置,每一步都是对编程技能的提升。希望以上分享能够帮助...

    我的日记本—可参考

    5. **XML布局**:用于定义用户界面的结构和样式。 6. **SQLite数据库**:Android内置的轻量级数据库,用于持久化数据。 7. **ContentProvider**:如果需要在不同应用之间共享数据,ContentProvider是标准接口。 8. *...

    安卓Android源码——便签软件.zip

    在安卓(Android)平台上,开发一个便签应用是常见的任务,它可以帮助用户快速记录生活、工作中的点滴。本文将深入探讨“安卓Android源码——便签软件.zip”中包含的知识点,带你理解如何构建一个基本的便签应用。 ...

    最新2020程序员实习日记范文6篇.docx

    这篇文档包含了六篇程序员实习日记,记录了一位实习生在2020年期间学习和工作的点滴,主要涉及Java编程、开源框架、数据库管理和Web应用开发等主题。以下是这些日记中提炼出的重要知识点: 1. **Java编程框架**:...

    QQ发表说说功能框的代码

    QQ发表说说功能框是QQ社交平台上的一个重要组成部分,它允许用户分享心情、想法或生活点滴,与好友进行互动。实现这一功能涉及到前端界面设计、后端数据处理以及用户交互等多个方面的技术。以下是对这个功能框背后的...

    幸福就是现在作文(集合15篇).docx

    【部分内容】中的第一篇文章讲述了主人公在生活中感到忙碌和压力,但在生日那天得到了家人的惊喜,从而意识到幸福就存在于日常生活的点滴之中。第二篇文章通过与爷爷下棋的情景,展现了亲情的温暖和陪伴带来的幸福感...

    博客系统演示

    这种系统提供了一种便捷的方式,让人们能够分享思想、观点、专业知识或者生活点滴,无需深入学习编程技术。博客引擎是博客系统的核心组成部分,它负责处理用户的交互、内容管理、模板渲染和权限控制等功能。 在...

    Android随手记

    5. **SQLite数据库操作**:通过SQLiteOpenHelper类创建数据库和表,并使用ContentProvider或者SQLiteDatabase对象进行插入、查询、更新和删除等数据库操作。 6. **Intent通信**:在Android中,Intent用于启动新的...

    myBase-Desktop-Ver735-Setup.zip

    5. **同步与备份**:支持本地和云同步,确保数据安全,方便多设备间的信息共享。 6. **密码保护**:提供密码保护机制,确保私人信息的安全。 7. **导入导出**:兼容多种格式,如TXT、HTML、XML等,便于与其他应用...

    WEB2.0论文

    例如,博客允许个人表达观点,分享生活点滴,而维基百科则让用户共同编写和编辑知识,实现了大规模协作的知识创作。 在技术层面,Web 2.0的实现离不开Ajax(Asynchronous JavaScript and XML)等技术的支持。Ajax...

    自己编写的Android记事本APP软件

    在Android平台上,开发一款记事本应用是一项基础且常见的任务,可以帮助用户记录日常生活中的点滴信息。这个名为"DateNote"的APP就是你自己使用Android Developer Tools(ADT)编写的成果,它展示了Android应用开发...

    简单的个人记事本APP

    5. **权限管理**:Android应用需要在Manifest.xml文件中声明所需的权限,比如调用照相机的`&lt;uses-permission android:name="android.permission.CAMERA" /&gt;`。在运行时,应用还需要请求用户的许可才能访问这些敏感...

    Jishiben.rar_android_记事本Android

    在Android平台中,开发一款记事本应用程序是一项基础且实用的任务,它能够帮助用户记录生活中的点滴、工作中的想法或是学习笔记。本教程将深入探讨如何使用Android Studio进行记事本应用的开发,以"Jishiben.rar...

Global site tag (gtag.js) - Google Analytics