XML约束

XML约束

1、概念

一个用来约束XML文档的书写规范的文件

2、常用的约束

  • XML DTD
  • XML Schema

3、DTD约束

① 概念

DTD(Document Type Definition),文档类型定义

文件扩展名是(*.dtd)

② 语法

(1)元素定义

使用 ELEMENT 来声明一个XML元素

<!ELEMENT 父标签 (子标签 | 子标签 | 子标签)>
用 | 分割表示子标签只能是其中一个

<!ELEMENT 父标签 (子标签, 子标签, 子标签)>
用 逗号 分割表示子标签的顺序必须和声明时的一致

<!ELEMENT 父标签 (子标签 | 子标签 | 子标签)*>
子标签的顺序可以是无序的

使用通配符来控制子标签出现的次数

<!ELEMENT 父标签 (子标签?)>
子标签出现零次或一次

<!ELEMENT 父标签 (子标签*)>
子标签出现零次或多次

<!ELEMENT 父标签 (子标签+)>
子标签出现一次或多次

如果标签没有子标签(自结束标签),则可以声明为 EMPTY

<!ELEMENT 标签名 EMPTY>

如果不限制标签的内容,则可以使用 ANY

<!ELEMENT 标签名 ANY>

如果子标签的内容需要解析器来解析,则可以使用 #PCDATA【被解析的字符数据(Parsed Character Data)】

<!ELEMENT 标签名 (#PCDATA)>

(2)属性定义

使用 ATTLIST 来声明元素的属性

<!ATTLIST 元素名
属性名称 属性类型 属性类型 默认值
属性名称 属性类型 属性类型 默认值
>

属性类型:
CDATA           值为字符数据 (character data)【不会被解析器解析的文本】
(en1|en2|..)    此值是枚举列表中的一个值

属性值说明有3类:
#REQUIRED         属性值是必需的
#IMPLIED          属性不是必需的
#FIXED "value"    属性值是固定的

默认值:
注意:需要用引号引起来;如果属性类型是#REQUIRED或#IMPLIED,则不允许有默认值

③ 引入方式

  1. 内部引入:

    直接在XML文件内编写约束(一般不用)

    示例

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE animal [
    <!ELEMENT animal (#PCDATA)>
    
    <!ATTLIST animal
    name CDATA #REQUIRED
    >
    ]>
    
    <animal name="Tom">Cat</animal>
    
  2. 外部引入:

    DTD约束是一个独立的文件,并在XML中引入

    <!DOCTYPE 文档根节点 SYSTEM "DTD文件路径">
    

    DTD文件在本地

    <!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL路径">
    
    例如:
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    

    DTD文件在网络上

④ 示例一

XML DTD文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT person (name?, age?, gender?, live?)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age EMPTY>
<!ATTLIST age
value CDATA #REQUIRED
>

<!ELEMENT gender EMPTY>
<!ATTLIST gender
value (man | woman) #REQUIRED
>

<!ELEMENT live EMPTY>
<!ATTLIST live
value CDATA #FIXED "yes"
>

XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person SYSTEM "person.dtd">
<person>
    <name>Tom</name>
    <age value="14" />
    <gender value="man" />
    <live value="yes" />
</person>

⑤ 示例二

XML-DTD文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT users (user+)>

<!ELEMENT user (name?, age?, gender?, (height | weight)*)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age EMPTY>
<!ATTLIST age
value CDATA #REQUIRED
>

<!ELEMENT gender EMPTY>
<!ATTLIST gender
value (man | woman) #REQUIRED
>

<!ELEMENT height EMPTY>
<!ATTLIST height
value CDATA #IMPLIED
>

<!ELEMENT weight EMPTY>
<!ATTLIST weight
value CDATA "0"
>

XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users SYSTEM "user.dtd">
<users>
    <user>
        <name>张三</name>
        <age value="14" />
        <gender value="man" />
        <height value="174" />
        <weight value="65" />
    </user>
    <user>
        <name>李四</name>
        <age value="12" />
        <gender value="woman
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值