XML、DTD、Schame
XML
1.xml的定义:
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
2.xml和html的区别
- xml主要用于结构化、传输和存储数据,用于程序的配置,html用于格式化和显示数据
- xml是独立于软件和硬件的信息传输工具,html需要被相关软件解析才能显示
3.xml具体语法
3.1.xml组成部分
- 文档声明
<?xml version="1.0" encoding="UTF-8"?>
- 元素
- 属性
- 注释
- CDATA数据(用于原样输出数据比如>、<、&……都会原样输出),具体语法如下:
<![CDATA[需要填写的数据]]>
- 处理指令(可以把xml当成html处理,当不建议这么做),比如:
<?xml-stylesheet type="text/css" href="1.css"?>
3.2.xml易错问题总结
- 在写xml的时候,保存xml的编码格式要和xml内容的encoding编码格式保持一致否则相关软件无法解析
- xml的头部声明"<?xml"和"?>"要连在一起不能分开
DTD
1.DTD的定义:
- DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。通俗点说就是用来限制xml文档的
2.DTD的使用方法
- 内部使用
- 外部引用
3.DTD的语法
3.1实例(内部使用)
<?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>
3.2实例(外部调用)
<?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>
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT rd (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
3.3实例(公共dtd调用)
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
3.4具体语法
- 元素
声明一个元素:1.声明一个元素 2.<!ELEMENT 元素名称 (元素内容)>
空元素:<!ELEMENT 元素名称 EMPTY>
只有 PCDATA 的元素:<!ELEMENT 元素名称 (#PCDATA)>
带有任何内容的元素:<!ELEMENT 元素名称 ANY>
带有子元素(序列)的元素:<!ELEMENT 元素名称 (子元素名称 1)>
元素只出现一次,0次或多次,至少一次,0次或者1次,声明“非.../既...”类型的内容
<!ELEMENT 元素名称 (子元素名称)>
<!ELEMENT 元素名称 (子元素名称*)>
<!ELEMENT 元素名称 (子元素名称+)>
<!ELEMENT 元素名称 (子元素名称?>
<!ELEMENT note (to,from,header,(message|body))>
- 属性
属性声明使用下列语法:<!ATTLIST 元素名称 属性名称 属性类型 默认值>
实例:<!ATTLIST payment type CDATA "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 属性值是固定的 |
- 声明实体
格式:
<!ENTITY 实体名称 "实体的值">
实例:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
xml引用:
<author>&writer;©right;</author>
3.5易错点
- 在元素后面必须敲空格,具体实例如下:
<!-- note后面有空格 -->
<!ELEMENT note (to,from,heading,body)>
<!-- to后面有空格 -->
<!ELEMENT to (#PCDATA)>
- dtd用来限制xml的,但是dtd不会影响xml的解析,并且一般只有在高级编辑器(eclipse、idea)才会显示dtd的限制错误,一般编辑器不会显示这种错误
- 现在浏览器对于xml打的dtd外部引用的实体定义不解析了(有实体定义必须写在xml里面)
- 一个xml只能用一个dtd
3.6 练习项目
DTD练习项目地址
提取码:h6wa
Schame
1.Schame的定义:
- XML Schema 是基于 XML 的 DTD 替代者。
- XML Schema 可描述 XML 文档的结构。
- XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
2.Schame的特点:
- XML Schema 可针对未来的需求进行扩展
- XML Schema 更完善,功能更强大
- XML Schema 基于 XML 编写
- XML Schema 支持数据类型
- XML Schema 支持命名空间
3.Schame的具体语法:
1.xml
<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
2.简单的schame实例(note.xsd):
- schame其实本质也是一个xml,只是后缀名是xsd
<?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">
<!--
W3C规定:在schame文件中书写element标签上的name属性来定义xml文件中标签的名称,用type属性来定义
标签的类型,如果是简单标签,type定义的标签中文本的数据类型
complexType标签用来定义当前element可以在xml书写的标签是复杂标签
simpleType标签用来定义当前element可以在xml书写的标签是简单标签
区别:有属性或者有子元素就是复杂标签,都没有就是简单标签
sequence标签用于规定子元素必须按照特定的顺序出现
-->
<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>
3.简单元素
- xsd元素
(1).定义简易元素的语法:<xs:element name=“xxx” type=“yyy”/>
(2).常用的类型有:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
(3).简易元素的默认值和固定值
<xs:element name=“color” type=“xs:string” default=“red”/>
<xs:element name=“color” type=“xs:string” fixed=“red”/> - xsd属性
(1)定义的语法、常用类型、默认值和固定值和元素的一样就是把element替换成attribute
(2).可选的和必需的属性,如下是必选,不写use是非必选:
<xs:attribute name=“lang” type=“xs:string” use=“required”/> - XSD 限定 / Facets,实例如下:
(1)对值得限定
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
(2).对一组值得限定,用枚举
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
也可以写为1:
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
(3).其他一些限定
<!--1.对一系列值的限定-->
<xs:element name="letter">
<!--
<xs:pattern value="[a-z]" />的value值得各种含义
1."[a-z]"---a到z任何一个字母
2."[A-Z][A-Z][A-Z]"---A到Z任何三个字母
3."xyz"---x、y、z任何一个字母
4."[0-9][0-9][0-9][0-9][0-9]"---任何0到9的四个数字
5."([a-z])*"---0个或多个a到z的字母
6."([a-z][A-Z])+"---至少一对字母,这对字母由一个小写加上一个大写组成
7."male|female"---male和female其中一个
8."[a-zA-Z0-9]{8}"---可接受的值是由 8 个字符组成的一行字符,这些字符
必须是大写或小写字母 a - z 亦或数字 0 - 9:
-->
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!--2.对空白符的限定-->
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<!--
value值可以有三个可选,分别是preserve(不移除空格) replace(移除所有空格)
collapse(移除多余的空格)
-->
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!--3.对长度的限定-->
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
(4)具体限定类型如下:
限定 | 描述 |
---|---|
enumeration | 定义可接受值的一个列表 |
fractionDigits | 定义所允许的最大的小数位数。必须大于等于0。 |
length | 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。 |
maxExclusive | 定义数值的上限。所允许的值必须小于此值。 |
maxInclusive | 定义数值的上限。所允许的值必须小于或等于此值。 |
maxLength | 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。 |
minExclusive | 定义数值的下限。所允许的值必需大于此值。 |
minInclusive | 定义数值的下限。所允许的值必需大于或等于此值。 |
minLength | 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。 |
pattern | 定义可接受的字符的精确序列。 |
totalDigits | 定义所允许的阿拉伯数字的精确位数。必须大于0。 |
whiteSpace | 定义空白字符(换行、回车、空格以及制表符)的处理方式。 |
4.Schame和xml的头部详解:
4.1 Schame
- xs:schema是每一个 XML Schema 的根元素
- :xs或者:xsi的意思是给schame起别名,因为一个xml可以引入多个schame,这种写法用于区分标签来自哪个schame,取了别名之后要在标签加上前缀<别名:标签></别名:标签>
<?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">
- 1.xmlns:xs=“http://www.w3.org/2001/XMLSchema”
显示 schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema”。
同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema” 的元素和数据类型应该使用前缀 xs:
2.targetNamespace=“http://www.w3school.com.cn”
显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: “http://www.w3school.com.cn”。
3.xmlns=“http://www.w3school.com.cn”
指出默认的命名空间是 “http://www.w3school.com.cn”。
4.elementFormDefault=“qualified” (有俩个值一个是qualified一个是unqualified),具体意思是,如果设置
qualified,要么所有标签有别名要么都没有,如果设置unqualified那么xml引入的schame一定要有别名,但是只要xml中根标签有别名就不会报错,子标签可以不用写别名
4.2 xml
-如果引入多个schame的话xsi:schemaLocation的值用空格隔开就行,比如:
xsi:schemaLocation="http://www.w3school.com.cn note.xsd http://www.w3school.com.cd note1.xsd>,
然后就是引入的命名空间要取别名,默认的命名空间只能是一个
<?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">
- 1.xmlns=“http://www.w3school.com.cn”
规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档
中使用的所有元素都被声明于 “http://www.w3school.com.cn” 这个命名空间。
一旦您拥有了可用的 XML Schema 实例命名空间:
2.xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:
xsi:schemaLocation=“http://www.w3school.com.cn note.xsd”
schame练习
Schame练习项目地址
提取码:3v8z
注释:在这种情况下,类型 “carType” 可被其他元素使用,因为它不是 “car” 元素的组成部分。 ↩︎