--------------------XML
标记语言--------------------
1. XML简介
1)
标记:是一种传输元数据的
方法。
标记就像
标点符号一样,用来定义文档的结构,以及语句是在哪里开始,到哪里结束。只是
这里所说的
标记是用在应用程序上的。用来告诉应用程序如何处理和表示文档。
2)语言:整套用来定义语法和文法的
标记集合,称为语言
3)SGML: standard Generalized Markup Language. 标准通用
标记语言。1986年被ISO接受为
国际性的数据存储和交换的标准。
SGML 非常强大,但也非常复杂
4)XML:XML是SGML的一个子集,要比SGML简单的多
XML是一种界定文本数据的简便而标准的
方法,曾经被人称为WEB上的ASCII码
5)XML 和 HTML 之间的联系和区别
XML基于ISO/IEC10646字符集标准(等同于Unicode标准)中定义的通用字符集UCS。
XML注重的是数据本身,而HTML注重数据以及数据的表达方式。
XML不是编程语言,而HTML是一门编程语言。
HTML采用固定的
标记集,XML的
标记集是可以扩展的。
6)DTD 文档类型定义 Document Type Definition
表述XML文档结构的机制
确保能在应用程序中使用XML文档
7)任何一门语言都有其特定的应用领域,也就是说很难有一门语言可以
解决所有领域的信息
表达、存储以及交换问题。因此,XML应用在WEB领域用来传输数据是非常完美的,但是它却不
能像HTML 这样表达数据。
8)数据交互新方式 ---词汇表
背景:由于浏览器的开发者不断的
添加新的
标记和
功能,但这些
标记都只是特定的浏览器
以及各自公司的半专业化的,在其他的浏览器上经常会出现不兼容的问题。虽然有新
功能的丰富
但大多数这些新增的
标记和
功能都是专用的。所以并没有对数据建模、语义
标记或者结构化信息
交换协议上位HTML提供多少帮助。
XML词汇表共享
解决了这个问题。它为不同的组织和计算机应用程序之间交换信息提供了一条
途径。
词汇表,对XML数据的描述,信息交换的媒介,通常由一组公司协作制定。
几种常见的词汇表:
科学词汇表:CML 化学
标记语言、BSML 用于基因序列和映射信息
商业词汇表:
法律词汇表
医学词汇表
计算机词汇表
9)XML编写规则
a. 所有的XML都必须
关闭标签
b.
标签对对大小写敏感
c. 必须正确的嵌套
d. 必须要有根元素
e. 所有的
属性值必须加引号
f. 实体的引用,
在XML中,一些特殊的字符可以通过引用来实现。
XML中 5个预定义的实体引用:
<
<
>
>
&
&
'
'
"
"
注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用
实体引用来代替它是一个好习惯。
g.
注释
<!-- this is comment -->
h. XML中,空格会被保留下来
i. XML以 LF 存储换行
注: 换行: windows 回车(CR-LF) unix (LF) macintosh(CR)
2. XML
3. DOCTYPE 声明
用于指定当前XML
文件, 采用何种 DTD 文档的定义来解析。
例如:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
注释:
0) plist顶级元素,指定DTD 中定义的顶级元素的类型
1)- 表明 后面所写的组织并没用经过ISO
注册过
不写就是默认已经
注册过 +
2)Apple 创建和维护该文档的团体或者组织
名称
3) DTD 文档类型
4) PLIST
标签:指定的公开文本唯一性描述
名称,后面可以带版本号 ???
5) 1.0 版本号
6) EN 语言,即用于创建所引用对象的自然语言编码系统
7) PUBLIC | SYSTEM 可用性
PUBLIC 公开的
SYSTEM 本地资源或者URL
8) "http://www.apple.com/DTDs/PropertyList-1.0.dtd" 引用的
文件的位置
-------------------------DTD 文档类型定义---------------------------
2.DTD
1. 基础概念 A) CDATA 字符数据,不会被解析器解析的文本。该值类型的数据中的
标签不会被当作
标记来解析。 B) PCDATA 字符数据,会被解析器解析的文本。如果该值类型的数据中包含的
标签,它将会被解析处 理。 C) 元素 构建XML 及HTML 的结构模块。 如<body>..</body> D) 实体 普通文本或者特殊字符引用变量 E)
属性 用来提供给元素的额外信息。 F) XML DTD文档声明 1)内部的 DOCTYPE 声明 <!DOCTYPE 根元素 [元素声明]> 2)外部文档声明 <!DOCTYPE 根元素 SYSTEM "
文件名"> 2. DTD 元素 1)元素的声明 <!ELEMENT 元素
名称 类别> 或 <!ELEMENT 元素
名称 (子元素,子元素)> 2)类别 A) 空元素 EMPTY <!ELEMENT ture EMPTY> B) 任何
内容的元素 ANY <!ELEMENT note ANY> C) PCDATA元素 PCDATA <!ELEMENT to (#PCDATA)> D) 没有 CDATA元素 CDATA 注意:元素的没有 CDATA类型 //////////////////////////////////////////// //注意: 下面所有元素声明中,如果包含了子元素,或者子元素序列,则下面也必须 按着该序列来对子元素进行声明。??? E) 带有子元素(序列)的元素 <!ELEMENT 元素
名称 (子元素1)> 或 <!ELEMENT 元素
名称 (子元素1, 子元素2...)> 例如: <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> <!ENTITY % plistObject "(array | data | date | dict | real | integer | string | true | false )" > <!ELEMENT plist %plistObject;> F) 只出现一次的元素 <!ELEMENT 元素
名称 (子元素
名称)> <!ELEMENT note (message)> 在note 元素内 message 子元素必须出现一次,并且只能出现一次。 H) 最少只出现一次的元素 + <!ELEMENT 元素
名称 (子元素
名称+)> I) 声明出现零次或多次的元素 * <!ELEMENT 元素
名称 (子元素
名称*)> J) 声明出现零次或一次的元素 ? <!ELEMENT 元素
名称 (子元素
名称?)> K) 声明“非.../既...”类型的
内容 <!ELEMENT 元素
名称 (子元素1, 子元素2, (子元素3 | 子元素4))> 如果 子元素3出现,则 子元素4 不出现 L) 声明混合型的
内容 * <!ELEMENT 元素
名称 (其他声明|子元素 | 子元素)*> 注:混合声明中使用 实体:??? 3. DTD
属性 1)声明
属性 单个
属性:<!ATTLIST 元素
名称 属性名
属性类型 默认值类型> 多个
属性:<!ATTLIST 元素
名称 属性1
属性1类型
属性1默认值类型
属性2
属性2类型
属性2默认值类型
属性3
属性3类型
属性3默认值类型 ... > 注: 多个
属性书写时,可以写在一行,中间用空格隔开就可以了 例如: DTD: <!ATTLIST plist version CDATA "1.0"> 对应的 XML: <plist version="1.0"/> comment: CDATA 类型表示,值为字符数据集 DTD: <!ATTLIST people id CDATA #
required name CDATA #
required sex CDATA #
required > XML : <people id="1" name="hello" sex="man"> 2)
属性类型 CDATA 值为字符数据 (en1| en2| en3|...) 值为枚举列表中过的值 ID 值为唯一的 IDREF 值为另一个ID的引用 IDREFS 值为另一个ID的引用列表 NMTOKEN 值为合法的XML
名称 NMTOKENS 值为合法的XML
名称列表 ENTITY 值为一个实体 ENTITIES 值为一个实体列表 NOTATION 值为一个符号的
名称 xml: 值为一个预定义的XML
名称值 例如: 1. 枚举列表 <!ATTLIST plist abc (check | cash| try) "try"> 2. ID 及 IDREF / IDREFS ??? ID 类型声明的
属性值类型,整个文档都不能有重复。即使不在同一结构里 IDREF 类型声明的
属性值类型,为另一个ID的值。 IDREFS 存在的ID列表。ID之间用空格隔开 ID 必须以 字符 下划线开头 3. NMTOKEN / NMTOKENS ??? 一个合法的XML
名称,只判断
文件名是否合法,NMTOKENS为 XML名列表,以空格 隔开 4. ENTITY /ENTITIES 指定
属性值得类型为 实体或者实体列表 5. NOTATION 设定 NOTATION类型的
属性,可以向应用程序指定一个外部的处理程序。 MIME类型: <!NOTATION 记号名 SYSTEM "MIME类型"> 应用程序路径: <!NOTATION 记号名 SYSTEM "URL路径名"> <!ATTLIST 电影 演示设备 NOTATION ( mp | gif ) #
required> <!NOTATION mp SYSTEM "movPlayer.exe"> <!NOTATION gif SYSTEM "Image/gif"> NOTATION 包含的符号都需要单独用 NOTATION 声明 <!ENTITY ICON SYSTEM "D:\Codes\XML\b1.gif" NDATA FF> 不直接解析 ICON 引用的对象,需要借助 FF 符号所指的程序来解析。因此 FF也是需要下面NOTATION 语句来声明 <!NOTATION FF SYSTEM "iexplore.exe"> 3) 默认值类型 值
属性的默认值 #
required 属性值是必需的 #IMPLIED
属性值是不必需的 #FIXED value
属性值是固定的 例如: <!ATTLIST plist abc CDATA #
required> <!ATTLIST plist abc CDATA #FIXED "1"> <!ATTLIST plist abc CDATA #IMPLIED> <contact fax="123"> 或者 <contact/> 4. DTD 实体 A)概念: 实体是用于定义普通文本和特殊字符的快捷方式的变量 实体分为通用实体和参数实体。还可以分为未解析和解析实体。 通用实体:用于引用文本或者二进制数据,主要用在XML
文件中 参数实体:用于DTD
文件中 B)声明 定义在当前DTD文档内部的: 通用实体声明: <!ENTITY 实体
名称 "实体的值"> 参数实体声明: <!ENTITY % 实体
名称 "实体的值"> 定义在当前DTD文档外部的: 通用实体声明: <!ENTITY 实体
名称 SYSTEM "URI"> <!ENTITY 实体
名称 PUBLIC "public_ID" "URI"> 参数实体声明: <!ENTITY % 实体
名称 SYSTEM "URI"> <!ENTITY % 实体
名称 PUBLIC "public_ID" "URI"> 通用外部未解析实体: <!ENTITY 实体名 SYSTEM 二进制数据位置 NDATA
标记名称> <!ENTITY background SYSTEM "background.png" NDATA PNG> 例子: 1) 一个内部实体的声明 <!ENTITY writer "emptylau“> <!ENTITY copyright "Copyright www.emptylau.com"> 2) 外部实体声明 SYSTEM / PUBLIC <!ENTITY 实体
名称 SYSTEM "URI/URL"> <!ENTITY writer SYSTEM "http://www.empytlau.com/entities.dtd"> <!ENTITY 实体
名称 PUBLIC "public_ID” "URL"> 注解: URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。 而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用 来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name, 统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说, URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。 URL和URN都是一种URI C)XML 中实体的引用 XML 中是的引用
包括三部分构成 一个和号(&),一个实体
名称 以及一个分号(;) 通用实体: <anchor>&writer; ©right; </anchor> 参数实体: <anchor>%writer; %copyright;</anchor> D) 通用实体 和参数实体 区别 上面在介绍的所涉及的都是通用实体。下面是一个参数实体的例子: 参数实体: <!ENTITY % peopleParameters "age CDATA #IMPLIED weight CDATA #IMPLIED height CDATA #
required"> <!ATTLIST InsuredPerson %peopleParameters; carrier CDATA #
required > 参数实体在声明和使用方式上同通用实体本质上是一样的。只是这里使用的 是 % 百分号 <!ENTITY % myParm SYSTEM "HTTP://WWW.GOOTRY.COM" > 1)通用实体既可以在DTD文档中引用,也可以在XML文档中引用。参数实体只能在DTD文档 中引用 2) 通用实体不能作为独立的DTD声明语句,参数实体可以。 参数实体主要
功能是用在DTD文档中,用作声明时使用;通用实体主要用在XML 文档中使用。 E) 实体可以嵌套使用 <!ENTITY note "xml"> <!ENTITY description "¬e; 2014-8-3"> 注意:不要写成死循环