xml的约束DTD详解

XML约束:用来规范一份xml文档的书写要求的,包含哪些元素、属性、以及顺序、次数等。
xml的约束技术有两种:
DTD和Schema,本文主要介绍DTD约束

DTD约束

1.可以写在xml内部写,也可以引用外部的约束文件
在内部写:

<!DOCTYPE note[
    <!ELEMENT note(to,from,heading,body)>
    <!ELEMENT to(#PCDATA)>
]>

2.xml引用外部的约束文档时,可以引用本地的,可以引用公共的
本地:<!DOCTYPE 根节点 SYSTEM "DTD_URL">
公共:<!DOCTYPE 根节点 PUBLIC "DTD_NAME" "DTD_URL">

3.DTD中元素定义使用element

<!ELEMENT 元素名称 元素内容/元素类型>
  • 使用()声明元素的内容<!ELEMENT 书架 (书+)>
  • 使用ANY、EMPTY生命元素的类型
    <!ELEMENT 商店 ANY>

  • 使用, | 来组织关系

    • ,代表按顺序出现
      <!ELEMENT FILE (NAME,AUTHOR,DATE) >声明了FILE的内容必须是先出现一个NAME标签,而后再出现一个AUTHOR标签和DATE标签。

    • |代表选择关系
      <!ELEMENT HERO (NAME|NICK)> HERO标签的内容要么是NAME要么是NICK

  • 使用?*+来说明内容出现的次数
    这里的含义和正则中的含义是一样的
    ?一次或零次
    *零次或多次
    +一次或多次
  • 使用()可以来组织关系
    如:<!ELEMENT FILE ((TITLE*,AUTHOR,TIME?)+|COMMENT) >

4.元素属性的定义

<!ATTLIST 元素名
        属性名 属性类型 属性说明
        属性名 属性类型 属性说明>
  • 属性说明#FIXED #IMPLIED #REQUIRED 默认值
<!ATTLIST 作者
         姓名 CDATA  #REQUIRED
         联系方式 CDATA #IMPLIED
         爱好 CDATA #FIXED "上网">  
解释:姓名是必须的属性,联系方式是可选的属性,爱好有默认值上网,且不能改
  • 属性的类型CDATA ID ENUMERATED 实体

    • CDATA就是字符串类型
    • ID是说这个属性的值唯一,不能相同
      如:
    <!DOCTYPE 联系人列表
                            <!ELEMENT 联系人 (姓名,联系方式)>
                            <!ELEMENT 姓名 #PCDATA>
                            <!ELEMENT 联系方式 #PCDATA>
                            <!ATTLIST 联系人
                                联系人编号 CDATA ID #REQUIRED>
                        >
    • ENUMERATED 的意思是“枚举”
      如:
    <!ELEMENT 商品 EMPTY>
                <!ATTLIST 商品 
                    分类  CDATA (吃的|喝的|玩的)
                    价格 CDATA #REQUIRED
                    >
    • 实体包括 引用实体(xml)和参数实体(dtd)
      如:
    <!ENTITY book "javaweb开发"><!-- 声明了一个引用实体 -->
    <!-- 在xml中写 &book; 就是使用了实体 -->
    
    <!ENTITY % person "姓名,性别,年龄,生日"> <!-- 声明了一个参数实体 -->
    <!ELEMENT 雇员 (%person,薪水)><!-- (姓名,性别,年龄,生日,薪水) -->
    <!ELEMENT 客户 (%person,联系方式)> <!-- (姓名,性别,年龄,生日,联系方式) -->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值