XML约束

本文详细介绍了XML约束的重要性和作用,主要讲解了DTD(Document Type Definition)和Schema两种约束类型。DTD用于限制XML文档的结构和元素,如规定元素的层级关系、类型和属性。Schema提供更强大的约束能力,支持更复杂的数据类型和命名空间。通过引入外部或本地DTD和Schema,可以确保XML文件的结构规范和一致性。
摘要由CSDN通过智能技术生成

一、为什么使用约束:

  • 在XML文件中如果没有添加约束,我们在编写XML文件的时候可以在任意位置添加任意的标签,这样不利于我们解析。
  • 在XML文件中 我们可以编写一个XML约束文件来约束编写XML的规范。
  • 对于约束文件,程序员看得懂即可,不用我们自己写约束文件。

二、XML约束类型:

  • DTD约束:
    • javaweb项目中的web.xml使用的就是dtd约束。
    • DTD约束文件的后缀名是.dtd。
  • Schema约束:
    • Spring Framework中的application.xml使用的就是Schema约束。
    • Schema约束文件的后缀名是.xsd。

三、约束的内容:

  • 约束XML中不同标签的层级关系。
  • 约束标签名、标签类型。
  • 约束标签的属性,包括属性名、属性类型、属性约束。

四、DTD约束:

1.语法:

(1)约束标签的层级关系:
<!ELEMENT 标签 (子标签) >
<!--定义users标签,该标签下可以出现0-n个子user标签-->
<!ELEMENT users (user*) >
<!--定义user标签,该标签下必须有两个子标签username,password,且顺序不能颠倒-->
<!ELEMENT user (username,password) >
<!--数量词
	+表示元素可以有1-n个
	*标识元素可以有0-n个
	,表示元素必须按照指定的顺序出现
-->
(2)约束标签:
<!ELEMENT 标签名 (标签类型) >
<!--username,password标签的类型都是字符串类型-->
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>

<!--标签类型
	EMPTY 没有类型
	ANY 任意类型
	#PCDATA 字符串
-->
(3) 约束标签的属性:
<!ATTLIST 标签名 属性名 属性类型 属性约束 属性名 属性类型 属性约束 属性名 属性类型 属性约束 >
<!--
	user标签必须包含id属性,属性类型是ID,属性约束是#REQUIRED
	user标签必须包含country属性,属性类型是CDATA,属性约束是#IMPLED 
	user标签必须包含platform属性,属性类型是CDATA,属性约束是#FIXED,固定值是"gudingzhi"
	user标签必须包含source属性,属性类型是枚举,默认值"num1"
-->
<!ATTLIST user      
	id ID  #REQUIRED
	country CDATA #IMPLED 
	platform CDATA #FIXED "gudingzhi"
	source (num1|num2|num3) "num1"
>
<!--属性类型:
	CDATA 字符串
	ID 表示唯一
	ENUMERATED 表示枚举类型,属性取指只能从枚举列表中取
-->
<!--属性约束:
	REQUIRED  表示属性必须存在
	IMPLED 表示属性可有可无
	FIXED  表示属性有固定值
-->

2.引入约束:

  • 引入外部DTD约束:
<! DOCTYPE 约束中定义的的根元素名 PUBLIC "DTD约束的文件名" "DTD文档的URL">
  • 引入本地约束:
<! DOCTYPE 约束中定义的的根元素名 SYSTEM "DTD约束的文件名">

五、Schema约束:

1.语法:

<<?xml version="1.0" encoding="utf-8" ?>
<!--xmlns:xs:标准命名空间,每个Schema约束都有一个标准命名空间-->
<!--targetNamespace:目标命名空间-->
<xs:schema
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="https://www.suiyi.net"
        elementFormDefault="qualified"
>
    <!--表示orders是根标签-->
    <xs:element name="orders">
        <!--表示orders标签是个复杂标签,里面可以包含其他标签-->
        <xs:complexType>
            <!--表示orders里面的标签按顺序出现-->
            <xs:sequence>
                <!--表示orders标签下有子标签order-->
                <xs:element name="order">
                    <!--表示order标签是个复杂标签,里面可以包含其他标签-->
                    <xs:complexType>
                        <!--表示order里面的标签按顺序出现-->
                        <xs:sequence>
                            <!--表示order标签下有子标签id-->
                            <xs:element name="id" type="xs:unsignedInt"></xs:element>
                            <!--表示order标签下有子标签address-->
                            <xs:element name="address" type="xs:string"></xs:element>
                        </xs:sequence>
                        <!--表示给order设置属性attribute1,属性类型是整数,而且这个属性必须被设置,因为use="required"-->
                        <!--use="optional"表示这个属性是可选的-->
                        <xs:attribute name="attribute1" type="xs:int" use="required"></xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

2.引入约束:

<!--在xml文件根标签<orders></order>中加入属性xmlns="目标命名空间",就是我们在xsd文件中写的命名空间targetNamespace-->
<orders xmlns="https://www.suiyi.net"></order>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姓蔡小朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值