XML之DTD约束技术的入门

DTD约束技术

  • 创建一个dtd文件

  • 步骤

  • (1) xml中有多少个元素 就在dtd文件中有几个<!ELEMENT>

  • (2) 判断是简单元素 还是复杂元素

简单元素 : 没有子元素  
<!ELEMENT 元素名称(# PCDATA)>
复杂元素 : 有子元素的元素
<!ELEMENT,元素名称(子元素)>
有几个元素 写几个 <!ELEMENT>
例子:
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >

  • XML引入dtd文件

    <!DOCTYPE 根元素名称 SYSTEM "DTD文件的路径"
    例子:
    <?xml version="1.0" encoding="gbk"?>
    <!DOCTYPE person SYSTEM "1.dtd">
    <person>
        <name>张三</name>
        <age>16</age>
    <!--    <a>16</a>-->  这行加上会提示错误(校验 xml 的约束)
        </person>
    

    DTD引入方式

    (1)引入外部的 dtd 文件
    <!DOCTYPE  根元素名称  SYSTEM “dtd路径”>
    (2)使用内部的 dtd 文件
    
    -< !DOCTYPE 根元素名称[
    
    <!ELEYENT person (name , age )>
    
    <!ELEMENT name (#PCDATA)
    
    <!ELEMENT age (#PCDATA )>
    
    ]>
     举例:
    <?xml version="1.0" encoding="gbk"?>
    <!--<!DOCTYPE person SYSTEM "1.dtd">-->
    <!DOCTYPE person [
            <!ELEMENT person (name,age)>
            <!ELEMENT name (#PCDATA) >
            <!ELEMENT age (#PCDATA) >]>
    <person>
        <name>张三</name>
        <age>16</age>
    <!--    <a>16</a>-->
        </person>
    (3) 使用外部的 dta 文件(网络上的 dtd 文件)(看懂 知道什么意思就🆗了)
    
    <!DOCTYPE 根元素 PUBLIC “DTD 名称”“DTD 文档的 URL” >
    -后面学到框架 struts2 使用配置文件使用
    

DTD定义元素

  • 语法格式 : <!ELEMENT 元素名称 约束>

  • 简单元素 :<!ELEMENT name (#PCDATA)>

    <!ELEMENT name (#PCDATA)> 指name 是字符串类型的(#PCDATA)  字符串类型约束
    EMPTY     空约束 不能有内容
    ANY   任意类型
    
  • 复杂元素 : <!ELEMENT person ( name,age, sex)>

    这样写 子元素只可以出现一次
    解决: 表示子元素出现的次数
      + : 一次或者多次
      ? : 0次或者一次
      *	: 任意
    例子:
    This XML file does not appear to have any style information associated with it. The document tree is shown below.
    <!-- <!DOCTYPE person SYSTEM "1.dtd"> -->
    <person>
    <name>张三</name>
    <name>22</name>
    <!--     <age>16</age> -->
    <!--     <a>16</a> -->
    </person>
    
    子元素用逗号进行隔开:
          元素出现顺序要遵循;
    子元素直接使用|隔开
    表示元素只能出现其中的任意一个	  
    例子:
    <?xml version="1.0" encoding="gbk"?>
    <!--<!DOCTYPE person SYSTEM "1.dtd">-->
    <!DOCTYPE person [
            <!ELEMENT person (name|age)>
            <!ELEMENT name ANY>
            <!ELEMENT age ANY> ]>
    <person>
        <name>张三</name>
    <!--    <age>16</age>-->
    <!--    <a>16</a>-->
        </person>
    

    DTD定义属性

    • 语法 : <!ATTLIST 元素名称

    • 属性名称属性类型属性的约束>

    • 例子:
      <?xml version="1.0" encoding="gbk"?>
      <!--<!DOCTYPE person SYSTEM "1.dtd">-->
      <!DOCTYPE person [
              <!ELEMENT person (name+,age)>
              <!ELEMENT name ANY>
              <!ELEMENT age   ANY>
      <!--  在age 加入一个属性     -->
              <!ATTLIST age
                      ID1 CDATA #REQUIRED>
              ]>
      <person>
          <name>张三</name>
          <name>22</name>
          <age ID1="CESHI">16</age>
      <!--    <a>16</a>-->
          </person>
      
    • 属性的类型

      •  (1)\- CDATA :字符串		
        
      • (2)- ( aa|bb|cc ) 枚举类型 只能出现其中一个

      • (3)- ID:值只能是字母或者下划线开头

    • 属性的约束

      • - #REQUIRED :属性必须存在

      • - #IMPLIED :属性可有可无

      • - #FIXED :表示一个固定值 #FIXED " AAA "

      • -直接值

        *不写属性,使用直接值

        *写了属性,使用设置那个值

DTD定义实体

  • 语法:
 <!ENTITY  实体名称 “实体的值”>
*** <!ENTITY TEST “HAHAHEHE”>
  • 使用实体 & 实体名称: 比如 &TEST;

  • 注意

定义实体需要写在内部 dtd 里面,如果写在外部的 dtd 里面,有某些浏览器下,内容得不到。

XML测试代码

<?xml version="1.0" encoding="gbk"?>
<!--<!DOCTYPE person SYSTEM "1.dtd">-->
<!DOCTYPE person [
        <!ELEMENT person (name+,age)>
        <!ELEMENT name ANY>
        <!ELEMENT age   ANY>
<!--  在age 加入一个属性     -->
<!--        <!ATTLIST age-->
<!--        ID1 CADATA #REQUIRED>-->
        <!ATTLIST age
                ID1 CDATA #IMPLIED>
       <!ENTITY TEST "SAD">
        ]>
<person>
    <name>&TEST;</name>
    <name>22</name>
    <age >16</age>
<!--    <a>16</a>-->
    </person>

DTD自测

DTD - 来自网络的实例 (w3school.com.cn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值