首页
论坛
专栏
课程

分享:
基础知识: ## 1、xml: XML 指可扩展标记语言 XML 被设计用来传输和存储数据 HTML 被设计用来显示数据 XML与HTML的主要差异: XML不是HTML的替代。 XML和HTML为不同的目的而设计: XML被设计为传输和存储数据,其焦点是数据的内容。 HTML被设计用来显示数据,其焦点是数据的外观。 HTML旨在显示信息,而XML旨在传输信息。 一个 XML 文档实例 XML 使用简单的具有自我描述性的语法: ``` <?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> ``` 解释: 第一行是 XML 声明 ```<note>``` 描述文档的根元素 接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body) 最后一行 ```</note>``` 定义根元素的结尾 XML 语法规则: 所有 XML 元素都须有关闭标签 XML 标签对大小写敏感 XML 必须正确地嵌套 XML 必须正确地嵌套 XML 的属性值须加引号 实体引用 在 XML 中,一些字符拥有特殊的意义。 如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。为了避免这个错误,请用实体引用来代替 "<" 字符: ``` <message>if salary &lt; 1000 then</message> ``` 在 XML 中,有 5 个预定义的实体引用: ``` &lt; < 小于 &gt; > 大于 &amp; & 和号 &apos; ' 单引号 &quot; " 引号 ``` ## 2、DTD 文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。 DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。 01、内部的 DOCTYPE 声明 假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中: <!DOCTYPE 根元素 [元素声明]> 一个实例: ``` <?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>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> ``` 以上 DTD 解释如下: !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" 类型 02、外部文档声明 假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中: ``` <!DOCTYPE 根元素 SYSTEM "文件名"> ``` 这个 XML 文档和上面的 XML 文档相同,但是拥有一个外部的 DTD: ``` <?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> ``` 这是包含 DTD 的 "note.dtd" 文件: ``` <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ``` XML 文档构建模块 所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成: 元素 属性 实体 PCDATA CDATA 元素是 XML 以及 HTML 文档的主要构建模块。 属性可提供有关元素的额外信息。 实体是用来定义普通文本的变量。实体引用是对实体的引用。 大多数同学都了解这个 HTML 实体引用:"&nbsp;"。这个“无折行空格”实体在 HTML 中被用于在某个文档中插入一个额外的空格。 当文档被 XML 解析器解析时,实体就会被展开。 PCDATA PCDATA 的意思是被解析的字符数据(parsed character data)。 可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。 PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。 文本中的标签会被当作标记来处理,而实体会被展开。 不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。 CDATA CDATA 的意思是字符数据(character data)。 CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。 以下用案例重点说明下实体: 01、一个内部实体声明 语法: ``` <!ENTITY 实体名称 "实体的值"> ``` 例子: DTD 例子: ``` <!ENTITY writer "Bill Gates"> <!ENTITY copyright "Copyright W3School.com.cn"> ``` XML 例子: ``` <author>&writer;&copyright;</author> ``` 注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。 02、一个外部实体声明 语法: ``` <!ENTITY 实体名称 SYSTEM "URI/URL"> ``` 例子: DTD 例子: ``` <!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"> <!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd"> ``` XML 例子: ``` <author>&writer;&copyright;</author> ``` ### 3、XML Schema XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD: 定义可出现在文档中的元素<br> 定义可出现在文档中的属性<br> 定义哪个元素是子元素<br> 定义子元素的次序<br> 定义子元素的数目<br> 定义元素是否为空,或者是否可包含文本<br> 定义元素和属性的数据类型<br> 定义元素和属性的默认值以及固定值<br> 下面这个例子是一个名为 "note.xsd" 的 XML Schema 文件,它定义了上面那个 XML 文档的元素: ``` <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ``` note 元素是一个复合类型,因为它包含其他的子元素。其他元素 (to, from, heading, body) 是简易类型,因为它们没有包含其他元素。您将在下面的章节学习更多有关复合类型和简易类型的知识。 此文件包含对 XML Schema 的引用: ``` <?xml version="1.0"?> <note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> ``` <schema> 元素是每一个 XML Schema 的根元素,<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样: ``` <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3school.com.cn" xmlns="http://www.w3school.com.cn" elementFormDefault="qualified"> ... ... </xs:schema> ``` 代码解释: 显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema" 。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs: ``` xmlns:xs="http://www.w3.org/2001/XMLSchema" ``` 显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。 ``` targetNamespace="http://www.w3school.com.cn" ``` 指出默认的命名空间是 "http://www.w3school.com.cn"。 ``` xmlns="http://www.w3school.com.cn" ``` 指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。 ``` elementFormDefault="qualified" ``` 在 XML 文档中引用 Schema: ``` <?xml version="1.0"?> <note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> ``` 代码解释: 下面的片断: ``` xmlns="http://www.w3school.com.cn" ``` 规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。 一旦您拥有了可用的 XML Schema 实例命名空间: ``` xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ``` 您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置: ``` xsi:schemaLocation="http://www.w3school.com.cn note.xsd" ``` ## 注:学习XXE漏洞需要一定的xml基础知识,以上摘自w3c文档,详细教程参考w3c [XML教程](http://www.w3school.com.cn/xml/index.asp) [DTD](http://www.w3school.com.cn/dtd/index.asp) [XSD](http://www.w3school.com.cn/schema/index.asp) [XSLT](http://www.w3school.com.cn/xsl/index.asp) [XML DOM](http://www.w3school.com.cn/xmldom/index.asp)

上一篇 :
下一篇 :
讨论 (0)
沪ICP备16048531号-1
沪公网安备 31011502006611号