「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。
前言
大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。
以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。
摘要
本文主要介绍XML的两种常见的约束,DTD约束和Schema约束。
XML约束
XML是由用户进行自定义标签,但在编写XML文档时,可能会出现我们需求之外的标签,而这些标签本不应该出现在XML文档中,于是我们就规定了xml文档的编写规则,决定什么标签我们需要,需要的标签的属性又是什么。
常用的XML约束有两种:
- DTD约束:一种简单的约束技术,只能规定在xml文档中出现的标签,并不能约束属性。
- Schema约束:在DTD约束的基础上,还能约束标签的属性。
1.1 DTD约束
DTD可以被直接声明在内部XML文档中,也可以通过外部引用到XML文档中。
1.1.1 内部引用
【格式】
<!DOCTYPE 根元素 [元素声明]>
【实例展示】
<!DOCTYPE dept [
<!ELEMENT dept (id,position,description)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT position (#PCDATA)>
<!ELEMENT description (#PCDATA)>
]>
【参数说明】
- !DOCTYPE dept 说明此文档是dept类型
- !ELEMENT dept (id,position,description) 定义dept元素有三个子元素
- !ELEMENT id (#PCDATA)表明id元素为"#PCDATA"类型。
1.1.2 外部引用
外部引用也有两种方式,一种是通过本地引用,一种是通过url引用。
-
本地引用:
创建以".dtd"结尾的文件,内容如下:
<!ELEMENT dept (id,position,description)> <!ELEMENT id (#PCDATA)> <!ELEMENT position (#PCDATA)> <!ELEMENT description (#PCDATA)>参数介绍同上。
在xml文档中使用外部引用的格式为:
【本地引用格式】
<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">【实例展示】
<!DOCTYPE dept SYSTEM "dept.dtd"> -
url引用
【url引用格式】
<!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件的URL">
1.2 Schema约束
Schema约束实际也是xml文件,但是后缀名是".xsd"(XML Schema Definition)。
schema可以定义出现在xml文档中的元素和属性,以及子元素的次序和数目,数据类型等,功能比DTD更加的强大。并且在一个xml文档中可以引入多个schema。
由于元素标签是用户自定义的,所以可能会出现重名的情况,因此我们使用命名空间来解决这一问题。
1.2.1 定义schema约束
【格式】
xmlns:前缀="URI"
(URI可以是虚拟的,也就是说可以不是实际存在的,只是为了区分而已)
【实例展示】
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.dept.com"
xmlns="http://www.dept.com"
elementFormDefault="qualified">
<xs:element name="dept">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element name="position" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>表示是xml文档
【参数说明】
xmlns:xs="www.w3.org/2001/XMLSch…"声明命名空间
targetNamespace="www.dept.com"编写好schema文档后把该文档和命名空间关联绑定。
xmlns="www.dept.com"绑定前缀和命名空间。
elementFormDefault="qualified"说明该文档中声明的所有元素都属于指定的命名空间。
xs:complexType dept是复杂元素。
xs:sequence dept的子元素被sequence包含。
1.2.2 向XML文档中引入schema约束。
【格式】
<根标签 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.dept.com xsd文件路径"
xmlns="http://www.dept.com">
【参数说明】
xmlns:xsi="www.w3.org/2001/XMLSch…" 引入前缀。
xsi:schemaLocation="www.dept.com dept.xsd" 引入xsd文件和命名空间
xmlns="www.dept.com" 绑定前缀和命名空间。
小结
以上就是关于XML中两种约束的介绍,希望对读者有所帮助,如有不正之处,欢迎留言指正。