• XML约束之DTD


      XML文件的约束:什么叫约束呢?顾名思义,就是对xml文件的内容进行按照既定规则的限制。我们知道,因为xml文件的标签是可以自定义的,而往往我们用xml文件都是为了表达一定的数据集合(即小型的数据库),而众所周知的,数据库也是分类型的,如学生数据库,就包含了一系列的诸如name,age,studentid,grade等等元素,如果没有约束,在这样的学生数据库中添加了诸如cat,foot等等与之毫不相干的元素,就破坏了我们利用xml文件作为规定数据传输的严谨性,所以W3C对xml提供了两种约束来限定xml的元素内容:DTD约束和Schema约束。

      一、DTD约束:

      (1)dtd的元素约束

       DTD(Document Type Definition),文档类型定义,用来约束XML文档。dtd是平面式文档,dtd文件不是xml文档,通常扩展名为“.dtd”。它是最早的xml约束;例如要求xml文档的根元素必须是<students>,在<students>元素下可以包含0~n个<student>元素,每个<student>元素必须有一个number属性,而且还要有三个子元素,分别为<name>、<age>、<sex>,这三个子元素的内容必须为文本内容,而不能是子元素。

       格式展示:

      

    <!ELEMENT students (student+)>
    <!ELEMENT student (name,age,sex)>
    <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)>

      DTD约束的格式如上所示,dtd对元素的约束分为两种:一种是对简单元素的约束;另一种是对复杂元素的约束;

       简单元素的约束格式:<!ELEMENT 简单元素名 (#PCDATA)>

         (#PCDATA)代表一种约束格式,意思是简单元素的内容为文本,即字符串的形式

         其他约束:EMPTY:代表元素内容为空,例如:<stu/>

              ANY:代表元素内容可以为任意元素

       复杂元素的约束格式:<!ELEMENT 复杂元素名 (子元素名)>

         <!ELEMENT students (student+)>中,代表students的子元素是student元素,并且不止一个,该处的"+"是一个数量控制符

            数量控制符:"+":代表该元素出现一次或者多次

                  "?":代表该元素出现0次或者1次

                  "*":代表该元素出现0次或者多次

         <!ELEMENT student (name,age,sex)>中,代表student元素的子元素包含name,age,sex三个子元素,且三个子元素出现的顺序必须是name-->age-->sex,否则就会出错。故,此处","逗号代表子元素出现的顺序。此处,除了","逗号,还可以有"|"单竖线,表示student的子元素中只能出现它们三个中的其中一个

       所谓的复杂和简单元素,即是否包含子元素。

       

      (2)DTD文件在xml中如何引用

         3种方式:

        1):引入外部的dtd文件

    <!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">

        2):在xml文件内容使用dtd约束

    <!DOCTYPE 根元素名称[
       <!ELEMENT 元素名称 (...)> 
       < .......>
     ]>

        3):使用外部的dtd文件(网络上的)

    <!DOCTYPE 根元素名称 PUBLIC "dtd文件名称" "dtd文档url">

      (3)DTD的属性约束

       dtd约束除了可以对元素进行约束外,还可以对元素的属性进行约束,如

    <!ATTLIST sutdent
       id CDATA #REQUIRED
       sex (男|女) #IMPLIED
       school CDATA #FIXED "xx小学"
    >

       属性约束格式:

    <!ATTLIST 元素名
        属性名1 属性类型 设置说明
        属性名2 属性类型 设置说明
    ...>

    ATTLIST代表Attribute List,即属性集合

      1):属性的类型约束:

        CDATA:属性值为任意文本数据;

        Enumerated:属性值必须是枚举列表中的一个;如第二行的(男|女),表示sex属性必须是男或者女,不能为其他的值

        ID:属性值必须是唯一的,并且属性值不能以数字开头;一个元素最多只能有一个ID 属性,ID属性用来表示元素唯一性的唯一标识。ID属性就相当与元素的身份证号,必须是唯一标识!

      2):属性的设置说明

        #REQUIRED:表示属性是必须的;

        #IMPLIED:表示属性是可选的,即这个属性可以不给出;

        #FIXED "xx":表示该属性的值必须为xx

      (4)DTD对实体的定义

        所谓是实体,就是对一段内容或者一段代码取一个名字,方便在其他地方引用

        在xml文件中引用实体,用&实体名

        格式:

    <!ENTITY 实体名 "实体内容">

    举个列子:

    <!ENTITY email "123456789@qq.com">
    <person>
        <name>张三</name>
        <!--此处的@email就相当于调用了"123456789@qq.com"这个内容放到email标签中 -->
        <email>&email</email>
    </person>

       注:dtd对实体的定义最好定义在内部的dtd中,通过外部dtd定义的实体,在某些浏览器中不能兼容

  • 相关阅读:
    居中方法
    12个css实用技巧
    display元素来布局
    伪元素::before与:after
    弹性布局
    输入框下拉菜单
    HTMLinput日期输入类型
    模块XXXX可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86(32位)x64(64位)版本兼容。
    Epoll为我们带来了什么
    C内存管理相关内容--取自高质量C++&C编程指南
  • 原文地址:https://www.cnblogs.com/hushuai1314/p/6139179.html
Copyright © 2020-2023  润新知