XML、DTD和Schema

前端之家收集整理的这篇文章主要介绍了XML、DTD和Schema前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

定义:XML是一种数据传输和存储格式,用标签保存数据内容,利用标签嵌套关系保存数据之间关系
应用场景:不同平台间数据传输、程序配置文件
存在形式:XML文件、也存在内存或网络中,不要把XML狭隘理解为XML文件
校验:浏览器内置Html和XML解析器,可以校验xml是否正确

一、XML语法

  1. 1、声明或处理指令PI(processing instruction),指定解析器如何解析显示XML文档
  2. ①声明前不能有任何内容(如注释)
  3. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  4. version必须存在,当前xml所遵循规范版本1.0
  5. encoding指定xml解析编码,必须和xml文件保存编码一致,默认值iso8859-1(欧美拉丁字母符号,没有中文)
  6. standalone指明xml是否独立,默认值yes表明不依赖其他文档,no表明依赖其他文档(很多解析器都会忽略此属性)
  7.  
  8. ②处理指令PI
  9. <?xml-stylesheet type="text/css" href="xxx.css"?>XML指定样式css显示
  10.  
  11. 2、元素(xml标签)
  12. 只能包含一个根标签
  13. 一个元素分为开始和结束标签<a>xxx</a>,其间有文本内容(标签体)
  14. 一个元素不含任何内容为自闭标签<a/>
  15. 区分大小写如<A><a>是不同标记
  16. 命名不能以数字、标点符号"_""xml"开头,不能包含空格、冒号
  17.  
  18. 3、一个元素可以有多个属性,属性值用单引号或双引号<a size="xxx" color="xxx"/>,属性名遵循元素命名规则
  19.  
  20. 4<!-- 注释内容 -->,除了声明前外可在任意位置、不能嵌套注释
  21.  
  22. 5、转义字符/CDATA,可以使解析器将转义内容当作普通文本来处理
  23. ①转义字符
  24. &: &amp;
  25. <: &lt; >: &gt;
  26. ": &quot;
  27. ': &apos;
  28. <![CDATA[内容]]>
  29. 被括起来的内容,会被浏览器当作普通文本来处理
  30.  
  31. 区别:
  32. CDATA可以成段的进行转义,而转义字符一次只能转义一个字符
  33. CDATA可以保存原始数据,只通知解析器按普通文本去处理
  34. 转义字符改变了原始数据,用其他字符替代

二、XML约束

1、DTD是XML约束文件(.dtd),约束xml写法,并对xml校验

  1. ①外部引入,在外部文件中写DTD,必须用utf-8编码保存
  2. <!DOCTYPE 根元素名称 SYSTEM 文件位置>
  3. SYSTEM表明dtd在当前文件系统中,后面文件位置是当前硬盘中的位置
  4. <!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD文件URL">
  5. PUBLIC表明dtd在网络公共位置中,后面指明dtd名字和所在网络URL地址
  6.  
  7. ②内部引入,在xml中直接写<!DOCTYPE 根元素名称 [dtd约束的内容]>
  8.  
  9. ③约束元素 <!ELEMENT 元素名称 元素约束>
  10. 元素约束:
  11. ANY表示包含任意子元素
  12. EMPTY表示不含子元素
  13. ()表示子元素,表示子元素必须按顺序并列出现
  14. |表示子元素出现其中之一
  15. #PCDATA表示包含标签
  16. +表示一次或多次
  17. *表示0次或多次
  18. ?表示0次或一次
  19. 组合:<!ELEMENT 元素名称 ((TITLE*,AUTHOR?,EMAIL)* | COMMENT)>
  20.  
  21. ④约束属性 <!ATTLIST 元素名 属性 属性类型 属性约束>
  22. 属性类型:
  23. CDATA表明普通字符串
  24. ENUMERATED表明取指定枚举列表值
  25. ID表明属性值在文档中唯一,只能以字母或下划线开头
  26. 属性约束:
  27. #required表明当前属性必须存在
  28. #IMPLIED表明当前属性可选
  29. #FIXED表明当前属性具有固定值
  30. '默认值'表明当前属性具有默认值
  31.  
  32. ⑤实体ENTITY,对一段重复使用的内容引用、复用
  33. 引用实体,在xml中引用的实体
  34. 定义实体:<!ENTITY 实体名称 “实体内容 >
  35. 使用实体:&实体名称;
  36. 参数实体,在dtd中引用的实体
  37. 定义实体:<!ENTITY %实体名称 "实体内容">
  38. 使用实体:%实体名称;
  39.  
  40. 实例:
  41. <?xml version = "1.0" encoding="utf-8" ?>
  42. <!DOCTYPE 联系人列表[ <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人 (姓名,EMAIL)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> <!ATTLIST 联系人 编号 ID #required> ]>
  43. <联系人列表>
  44. <联系人 编号="a1">
  45. <姓名>张三</姓名>
  46. <EMAIL>zhang@it315.org</EMAIL>
  47. </联系人>
  48. <联系人 编号="a2">
  49. <姓名>李四</姓名>
  50. <EMAIL>li@it315.org</EMAIL>
  51. </联系人>
  52. </联系人列表>

2、Schema也是xml约束文件(.xsd),目的是为了克服DTD缺陷

  1. 1)Schema本身符合xml语法,方便解析
  2. 2)对名称空间支持有非常好
  3. 3)比DTD更多数据类型,并且自定义数据类型
  4. 4)语义约束更精确,强于DTD
  5. 5)比DTD复杂多,学习成本高
  6.  
  7. Schema文档必须有一个根结点(称为Schema)
  8. 名称空间xmlns:全世界唯一标识某个资源(通常是公司域名),仅是名称,不是真实的资源地址
  9.  
  10. 实例:
  11. XSD文件(book.xsd)
  12. <?xml version="1.0" encoding="UTF-8" ?>
  13. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="www.xxx.com" elementFormDefault="qualified">
  14. <xs:element name='书架' >
  15. <xs:complexType>
  16. <xs:sequence maxOccurs='unbounded' >
  17. <xs:element name='书' >
  18. <xs:complexType>
  19. <xs:sequence>
  20. <xs:element name='书名' type='xs:string' />
  21. <xs:element name='作者' type='xs:string' />
  22. <xs:element name='售价' type='xs:string' />
  23. </xs:sequence>
  24. </xs:complexType>
  25. </xs:element>
  26. </xs:sequence>
  27. </xs:complexType>
  28. </xs:element>
  29. </xs:schema>
  30.  
  31. XML文件(.xml)
  32. xmlns:w3指定名称空间(http://www.w3.org/2001/XMLSchema-instance)别名为w3
  33. w3:schemaLocation指定名称空间(www.xxx.com)来源于book.xsd文件(可以是网络地址)
  34. xmlns:my指定名称空间(www.xxx.com)别名为my
  35. <my:书架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance" w3:schemaLocation="www.xxx.com book.xsd" xmlns:my="www.xxx.com">
  36. <my:书>
  37. <my:书名>JavaScript网页开发</my:书名>
  38. <my:作者>张孝祥</my:作者>
  39. <my:售价>28.00</my:售价>
  40. </my:书>
  41. </my:书架>
  42.  
  43. XML文件(.xml)
  44. xmlns="www.xxx.com"可以忽略my 没有前缀默认使用这个空间
  45. <书架 xmlns:w3="http://www.w3.org/2001/XMLSchema-instance" w3:schemaLocation="www.xxx.com book.xsd" xmlns="www.xxx.com">
  46. <>
  47. <书名>JavaScript网页开发</书名>
  48. <作者>张孝祥</作者>
  49. <售价>28.00</售价>
  50. </>
  51. </书架>

GitHub博客http://lioil.win/2017/01/11/Xml-DTD-Schema.html
Coding博客http://c.lioil.win/2017/01/11/Xml-DTD-Schema.html

猜你在找的XML相关文章