XML入门(二)——XML约束

349 阅读3分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。

前言

大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍XML的两种常见的约束,DTD约束和Schema约束。

XML约束

XML是由用户进行自定义标签,但在编写XML文档时,可能会出现我们需求之外的标签,而这些标签本不应该出现在XML文档中,于是我们就规定了xml文档的编写规则,决定什么标签我们需要,需要的标签的属性又是什么。

常用的XML约束有两种:

  1. DTD约束:一种简单的约束技术,只能规定在xml文档中出现的标签,并不能约束属性。
  2. 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引用。

  1. 本地引用:

    创建以".dtd"结尾的文件,内容如下:

    <!ELEMENT dept (id,position,description)>
    <!ELEMENT id (#PCDATA)>
    <!ELEMENT position (#PCDATA)>
    <!ELEMENT description (#PCDATA)>
    

    参数介绍同上。

    在xml文档中使用外部引用的格式为:

    【本地引用格式】

    <!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
    

    【实例展示】

    <!DOCTYPE dept SYSTEM "dept.dtd">
    
  2. 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中两种约束的介绍,希望对读者有所帮助,如有不正之处,欢迎留言指正。