XML 学习笔记<一>

前端之家收集整理的这篇文章主要介绍了XML 学习笔记<一>前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
--------------------XML 标记语言--------------------

1. XML简介

@H_301_3@1)标记:是一种传输元数据的方法
@H_301_3@标记就像标点符号一样,用来定义文档的结构,以及语句是在哪里开始,到哪里结束。只是
@H_301_3@这里所说的标记是用在应用程序上的。用来告诉应用程序如何处理和表示文档。
@H_301_3@
@H_301_3@2)语言:整套用来定义语法和文法的标记集合,称为语言
@H_301_3@3)SGML: standard Generalized Markup Language. 标准通用标记语言。1986年被ISO接受为
国际性的数据存储和交换的标准。
@H_301_3@SGML 非常强大,但也非常复杂
@H_301_3@4)XML:XML是SGML的一个子集,要比SGML简单的多
@H_301_3@XML是一种界定文本数据的简便而标准的方法,曾经被人称为WEB上的ASCII码
@H_301_3@
@H_301_3@5)XML 和 HTML 之间的联系和区别
@H_301_3@XML基于ISO/IEC10646字符集标准(等同于Unicode标准)中定义的通用字符集UCS。
@H_301_3@XML注重的是数据本身,而HTML注重数据以及数据的表达方式。
@H_301_3@XML不是编程语言,而HTML是一门编程语言。
@H_301_3@HTML采用固定的标记集,XML的标记集是可以扩展的。
@H_301_3@
@H_301_3@6)DTD 文档类型定义 Document Type Definition
@H_301_3@表述XML文档结构的机制
@H_301_3@确保能在应用程序中使用XML文档
@H_301_3@
@H_301_3@7)任何一门语言都有其特定的应用领域,也就是说很难有一门语言可以解决所有领域的信息
@H_301_3@表达、存储以及交换问题。因此,XML应用在WEB领域用来传输数据是非常完美的,但是它却不
@H_301_3@能像HTML 这样表达数据。
@H_301_3@
@H_301_3@8)数据交互新方式 ---词汇表
@H_301_3@背景:由于浏览器的开发者不断的添加新的标记功能,但这些标记都只是特定的浏览器
@H_301_3@以及各自公司的半专业化的,在其他的浏览器上经常会出现不兼容的问题。虽然有新功能的丰富
@H_301_3@但大多数这些新增的标记功能都是专用的。所以并没有对数据建模、语义标记或者结构化信息
@H_301_3@交换协议上位HTML提供多少帮助。
@H_301_3@
@H_301_3@XML词汇表共享解决了这个问题。它为不同的组织和计算机应用程序之间交换信息提供了一条
@H_301_3@途径。
@H_301_3@
@H_301_3@词汇表,对XML数据的描述,信息交换的媒介,通常由一组公司协作制定。
@H_301_3@几种常见的词汇表:
@H_301_3@科学词汇表:CML 化学标记语言、BSML 用于基因序列和映射信息
@H_301_3@商业词汇表:
@H_301_3@法律词汇表
@H_301_3@医学词汇表
@H_301_3@计算机词汇表
@H_301_3@
@H_301_3@9)XML编写规则
@H_301_3@a. 所有的XML都必须关闭标签
@H_301_3@b. 标签对对大小写敏感
@H_301_3@c. 必须正确的嵌套
@H_301_3@d. 必须要有根元素
@H_301_3@e. 所有的属性值必须加引号
@H_301_3@f. 实体的引用,
@H_301_3@在XML中,一些特殊的字符可以通过引用来实现。
@H_301_3@XML中 5个预定义的实体引用:
@H_301_3@< @H_301_3@ &lt;
@H_301_3@> @H_301_3@ &gt;
@H_301_3@& @H_301_3@ &amp;
@H_301_3@' @H_301_3@ &apos;
@H_301_3@" @H_301_3@ &quot;
@H_301_3@注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用
@H_301_3@实体引用来代替它是一个好习惯。
@H_301_3@
@H_301_3@g. @H_301_3@ 注释
@H_301_3@<!-- this is comment -->
@H_301_3@h. XML中,空格会被保留下来
@H_301_3@i. XML以 LF 存储换行 @H_301_3@
@H_301_3@注: 换行: windows 回车(CR-LF) unix (LF) macintosh(CR)
@H_301_3@
2. XML
@H_301_3@
@H_301_3@
3. DOCTYPE 声明
@H_301_3@用于指定当前XML文件, 采用何种 DTD 文档的定义来解析。
@H_301_3@
@H_301_3@例如:
@H_301_3@<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
@H_301_3@"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
@H_301_3@注释:
@H_301_3@0) plist顶级元素,指定DTD 中定义的顶级元素的类型
@H_301_3@1)- 表明 后面所写的组织并没用经过ISO注册过 @H_301_3@不写就是默认已经注册过 +
@H_301_3@2)Apple 创建和维护该文档的团体或者组织名称
@H_301_3@3) DTD 文档类型
@H_301_3@4) PLIST 标签:指定的公开文本唯一性描述名称,后面可以带版本号 ???
@H_301_3@5) 1.0 版本号
@H_301_3@6) EN 语言,即用于创建所引用对象的自然语言编码系统
@H_301_3@7) PUBLIC | SYSTEM 可用性
@H_301_3@PUBLIC 公开的 @H_301_3@ SYSTEM 本地资源或者URL
@H_301_3@8) "http://www.apple.com/DTDs/PropertyList-1.0.dtd" 引用的文件的位置
@H_301_3@

-------------------------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; &copyright; </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 "&note; 2014-8-3"> 注意:不要写成死循环 原文链接:https://www.f2er.com/xml/298248.html

猜你在找的XML相关文章