XML笔记
2020、5、31
初识
- XML 指可扩展标记语言(eXtensible Markup Language)。
- XML 被设计用来传输和存储数据。
- 什么是XML
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML 是一种很像HTML的标记语言。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
- XML与HTML
- XML 被设计用来传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
- XML用途
- XML 应用于 Web 开发的许多方面,常用于简化数据的存储和共享。
- 把数据从HTML中分离
- 简化数据共享
- 简化数据传输
- 简化平台变更
- 创建新的互联网语言
- XHTML
- 用于描述可用的 Web 服务 的 WSDL
- 作为手持设备的标记语言的 WAP 和 WML
- 用于新闻 feed 的 RSS 语言
- 描述资本和本体的 RDF 和 OWL
- 用于描述针针对 Web 的多媒体 的 SMIL
- 通常XML被用于信息的记录和传递,因此经常被用于充当配置文件
XML树结构
- XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶"。
- 示例
<?xml version="1.0" encoding="UTF-8"?>
头部声明xml的版本和编码信息
<note> 描述文档的根元素
<to>Tove</to> 描述根的四个子元素
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> 定义根元素结尾
- 第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。
- XML 文档必须包含根元素(也就是没有兄弟元素的标签)。该元素是所有其他元素的父元素
- 示例2
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
XML语法规则
- XML 必须包含根元素,它是所有其他元素的父元素
- XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
-
所有XML元素必须包含结束标签
- 注释:从上面的实例中,您也许已经注意到 XML 声明没有关闭标签。这不是错误。声明不是 XML 文档本身的一部分,它没有关闭标签。
-
XML严格区分大小写
-
XML属性值必须加引号
-
注释同HTML
-
实体引用
-
如果把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。为了避免这个错误,请用实体引用来代替 "<" 字符
<message>if salary < 1000 then</message>
<message>if salary < 1000 then</message>
-
在 XML 中,有 5 个预定义的实体引用:
< < less than > > greater than & & ampersand ' ' apostrophe " " quotation mark -
注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
-
-
注释语法
<!-- This is a comment -->
-
XML会保留空格
XML元素
- XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
- 一个元素可以包含:
- 其他元素
- 文本
- 属性
- 或混合以上所有..
- 元素命名规则
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml(或者 XML、Xml 等等)开始
- 名称不能包含空格
- XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展。
XML属性
- 属性(Attribute)提供有关元素的额外信息。
- 示例
<file type="gif">computer.gif</file>
- 属性通常提供不属于数据组成部分的信息。在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要
- 属性值必须被引号包围,不过单引号和双引号均可使用
- 如果属性值本身包含双引号,可以使用单引号,或者可以使用字符实体
- 没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。
- 属性不能包含多个值(元素可以)
- 属性不能包含树结构(元素可以)
- 属性不容易扩展(为未来的变化)
- 有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的
- 元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
XML验证
- 通过 DTD 验证的XML是"合法"的 XML。
- 形式良好的XML
- XML 文档必须有一个根元素
- XML元素都必须有一个关闭标签
- XML 标签对大小写敏感
- XML 元素必须被正确的嵌套
- XML 属性值必须加引号
- XML错误会终止程序
- XML 文档中的错误会终止您的 XML 应用程序。
- W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。
- 如果使用 HTML,创建包含大量错误的文档是有可能的(比如您忘记了结束标签)。其中一个主要的原因是 HTML 浏览器相当臃肿,兼容性也很差,并且它们有自己的方式来确定当发现错误时文档应该显示为什么样子。
XML查看
-
在所有主流的浏览器中,均能够查看原始的 XML 文件。
-
XML 文档将显示为代码颜色化的根以及子元素。通过点击元素左侧的加号(+)或减号( - ),可以展开或收起元素的结构。要查看原始的 XML 源(不包括 + 和 - 符号),选择"查看页面源代码"或从浏览器菜单"查看源文件"。
-
注释:在 Safari 中,只有元素的文本将被显示。要查看原始的 XML,您必须右键单击页面,选择"查看源文件"。
-
如果一个错误的XML文件被打开,浏览器会报告错误。
XML CSS
- 通过使用 CSS(Cascading Style Sheets 层叠样式表),您可以添加显示信息到 XML 文档中。
- 使用
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
链接外部XMLcss文件 - 使用 CSS 格式化 XML 不是常用的方法。
- W3C 推荐使用 XSLT
XML XSLT
- 通过使用 XSLT,您可以把 XML 文档转换成 HTML 格式。
- XSLT 是首选的 XML 样式表语言。
- XSLT(eXtensible Stylesheet Language Transformations)远比 CSS 更加完善
- XSLT 是在浏览器显示 XML 文件之前,先把它转换为 HTML
XMLHttpRequest对象
- XMLHttpRequest 对象用于在后台与服务器交换数据
- 在不重新加载页面的情况下更新网页
- 在页面已加载后从服务器请求数据
- 在页面已加载后从服务器接收数据
- 在后台向服务器发送数据
XML解析器
- 所有现代浏览器都有内建的 XML 解析器。
- XML 解析器把 XML 文档转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象。
- 出于安全方面的原因,现代的浏览器不允许跨域的访问
- 这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。
DTD
初识
- Document Type Definition (文档类型定义)
- 用于约束XML的文档格式,保证XML是一个有效的XML
- 内部DTD(包含在XML文档中),外部DTD(外部单独的一个文件)
使用
-
可以分为两种(内部DTD,外部DTD)
-
内部DTD
-
假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中
<!DOCTYPE root-element(根元素) [element-declarations](元素声明)>
-
元素声明
<?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>
- !DOCTYPE note (第二行)定义此文档是 note 类型的文档。
- !ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
- !ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
- !ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型
- !ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
- !ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型
-
数量词
- +:表示元素出现一次或者多次,至少为一次
- ?:表示元素出现一次或者零次
- *:表示出现任意次
-
-
外部DTD
-
外部的DTD文件是以dtd为后缀名的文件,内部只需要写上xml头部声明在后面直接写声明字段即可
-
假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中
<!DOCTYPE root-element SYSTEM "filename">
-
示例
<?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
-
构建模块
- XML 和 HTML文档的主要的构建模块是元素标签。
- 所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
- 元素
- 元素是 XML 以及 HTML 文档的主要构建模块。
- HTML 元素的例子是 "body" 和 "table"。XML 元素的例子是 "note" 和 "message" 。元素可包含文本、其他元素或者是空的。空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。
- 属性
- 属性可提供有关元素的额外信息。
- 属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。
- 实体
- 实体是用来定义普通文本的变量。实体引用是对实体的引用。
- PCDATA
- PCDATA 的意思是被解析的字符数据(parsed character data)。
- 可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
- PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
- 文本中的标签会被当作标记来处理,而实体会被展开。
- 不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。
- CDATA
- CDATA 的意思是字符数据(character data)。
- CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
- 元素
声明元素
-
在一个 DTD 中,元素通过元素声明来进行声明。
-
示例
<!ELEMENT element-name category> 或 <!ELEMENT element-name (element-content)>
-
空元素通过类别关键词EMPTY进行声明:
<!ELEMENT element-name EMPTY> 实例: <!ELEMENT br EMPTY> XML example: <br />
-
只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:
<!ELEMENT element-name (#PCDATA)> 实例: <!ELEMENT from (#PCDATA)>
-
通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:
<!ELEMENT element-name ANY> 实例: <!ELEMENT note ANY>
-
带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:
<!ELEMENT element-name (child1)> 或 <!ELEMENT element-name (child1,child2,...)> 实例: <!ELEMENT note (to,from,heading,body)>
- 当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中
-
声明必须出现一次的元素
<!ELEMENT element-name (child-name)> 实例: <!ELEMENT note (message)>
-
声明"非.../即..."类型的内容
实例: <!ELEMENT note (to,from,header,(message|body))> 上面的例子声明了:"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素即 "body" 元素。
-
声明混合内容
实例: <!ELEMENT note (#PCDATA|to|from|header|message)*> 上面的例子声明了:"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。
声明属性
-
在 DTD 中,属性通过 ATTLIST 声明来进行声明。
<!ATTLIST element-name attribute-name attribute-type attribute-value> DTD 实例: <!ATTLIST payment type CDATA "check"> XML 实例: <payment type="check" />
-
属性类型
类型 描述 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" />
-
< !ATTLIST element-name attribute-name attribute-type #REQUIRED>
DTD: <!ATTLIST person number CDATA #REQUIRED> 合法的 XML: <person number="5677" /> 非法的 XML: <person />
-
< !ATTLIST element-name attribute-name attribute-type #IMPLIED>
DTD: <!ATTLIST contact fax CDATA #IMPLIED> 合法的 XML: <contact fax="555-667788" /> 合法的 XML: <contact />
-
< !ATTLIST element-name attribute-name attribute-type #FIXED "value">
DTD: <!ATTLIST sender company CDATA #FIXED "Microsoft"> 合法的 XML: <sender company="Microsoft" /> 非法的 XML: <sender company="W3Schools" />
-
< !ATTLIST element-name attribute-name (en1|en2|..) default-value>
DTD: <!ATTLIST payment type (check|cash) "cash"> XML 例子: <payment type="check" /> 或 <payment type="cash" />
SVG
初识
- SVG 意为可缩放矢量图形(Scalable Vector Graphics)。
- SVG 使用 XML 格式定义图像。
- 什么是SVG
- SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
- SVG 用来定义用于网络的基于矢量的图形
- SVG 使用 XML 格式定义图形
- SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
- SVG 是万维网联盟的标准
- SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
- SVG 于 2003 年 1 月 14 日成为 W3C 推荐标准。
- SVG的历史和优势
- 在 2003 年一月,SVG 1.1 被确立为 W3C 标准。参与定义 SVG 的组织有:Sun公司(已被Oracle公司收购)、Adobe、苹果公司、IBM 以及柯达。
- 优势
- SVG 可被非常多的工具读取和修改(比如记事本)
- SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。
- SVG 是可伸缩的
- SVG 图像可在任何的分辨率下被高质量地打印
- SVG 可在图像质量不下降的情况下被放大
- SVG 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)
- SVG 可以与 Java 技术一起运行
- SVG 是开放的标准
- SVG 文件是纯粹的 XML
使用
-
示例代码
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> </svg>
- 解析
- 第一行包含了 XML 声明。请注意 standalone 属性!该属性规定此 SVG 文件是否是"独立的",或含有对外部文件的引用。
- standalone="no" 意味着 SVG 文档会引用一个外部文件 - 在这里,是 DTD 文件。
- 第二和第三行引用了这个外部的 SVG DTD。该 DTD 位于 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"。该 DTD 位于 W3C,含有所有允许的 SVG 元素
- SVG 代码以 < svg >元素开始,包括开启标签和关闭标签 < /svg> 。这是根元素。width 和 height 属性可设置此 SVG 文档的宽度和高度。version 属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间。
- SVG 的 < circle> 用来创建一个圆。cx 和 cy 属性定义圆中心的 x 和 y 坐标。如果忽略这两个属性,那么圆点会被设置为 (0, 0)。r 属性定义圆的半径。
- stroke 和 stroke-width 属性控制如何显示形状的轮廓。我们把圆的轮廓设置为 2px 宽,黑边框。
- fill 属性设置形状内的颜色。我们把填充颜色设置为红色。
- 关闭标签的作用是关闭 SVG 元素和文档本身。
- 注释:所有的开启标签必须有关闭标签!
- 解析
-
在HTML中使用SVG
-
SVG 文件可通过以下标签嵌入 HTML 文档:
-