zoukankan      html  css  js  c++  java
  • xml技术DTD约束定义

    XML约束

      在XML技术中,可以编写一个文档来约束一个xml文档的书写规范,这称之为XML约束
    为什么需要XML约束?

      class.xml <stu><面积>?人怎么会有面积元素?

      xml 文件标签可以随便写,dtd可以对其有所要求按照合理的需求写

    xml文件约束--dtd

      document type definition 文档类型定义
    作用:

      定义xml标签约束,使开发者按照定义书写,也可以约束html文件

    使用:
    在项目中如需要一个xml文件,项目经理 可定义一个dtd文件,要求所有程序员按照此规范书写xml文件

    掌握要求:
    可根据别人提供的dtd文件,写出对应的xml文件即

    备注:dtd文件也必须使用utf-8编码和文件保持一致
    引入dtd
      格式:

      <!DOCTYPE 根元素名 SYSTEM "dtd路径">  本地使用SYSTEM
    备注:默认情况下浏览器不检测处理dtd约束,需要自己写代码测试或借助工具

    文件1
    checkDTD.html
    此只针对ie5 支持 别的浏览器不支持
    <html>
    <head>
    <title>测试dtd</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <script language="javascript">
    //创建一个xml解析器
    var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
    //开启校验功能
    xmldoc.validateOnParse=true;
    //指定对那个xml文件校验
    xmldoc.load("class.xml");
    //如果错误,输出错误信息
    document.write("错误信息="+xmldoc.parseError.reason+"<br/>");
    document.write("错误行号="+xmldoc.parseError.line);
    </script>
    </head>
    </html>

    class.xml文件
    <?xml version="1.0" encoding="utf-8"?>
    <!--一定保证文件的保存编码方式为utf-8-->
    <!DOCTYPE class SYSTEM "class.dtd">
    <class>
    <student ><!--优秀学生-->
    <name>杜杰</name>
    <sex>boy</sex>
    <age>28</age>
    <MT>12312</MT>
    </student>
    </class>

    xml.dtd文件
    <!ELEMENT class (student+)>
    <!ELEMENT student(name,age,des)> 学生标签下可有 名字,年龄,介绍三个元素
    <!ELEMENT name(#PCDATA)> 对名字进行说明
    <!ELEMENT age(#PCDATA)>
    <!ELEMENT des(#PCDATA)>

    DTD文档声明和引用  等同于CSS
    --内部DTD文档
      <!DOCTYPE 根元素 [定义内容]>
    --外部DTD文档
      <!DOCTYPE 根元素 SYSTEM "DTD文件路径">
    --内外部DTD文档结合
      <!DOCTYPE 根元素 SYSTEM "DTD文件路径"[定义内容]>

    引用DTD约束
      XML文件应用DOCTYPE 声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式
    @ 引用文件为本地
      <!DOCTYPE 文档根节点 SYSTEM "dtd文件路径">
    @ 引用文件时一个公共的文件时
      <!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件url">
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

    DTD文件定义
    <!ELEMENT NAME CONTENT>
    <!ELEMENT des(#PCDATA)>
      ELEMENT 关键字
      NAME 元素名
      CONTENT 元素类型(大写)
    CONTENT类型分析:
      EMPTY    该元素不能包含子元素和文本,但可以有属性(空元素)
      ANY      该元素可以包含任何在DTD中定义的元素内容
      #PCDATA   可以包含任何字符数据,但是不能在其中包含子标签 需用 ( ) 括起来

    组合类型
      <!ELEMENT 家庭 (人+,家电*)>
      +    元素  一到多个
      *    元素  0到多个
           元素  0到1次
      |        元素  在列出的对象中选择一个 man|women 至少出现一个
      ()      元素  分组
      ,        对象必须按指定的顺序出现(name,age,sex) name,age,sex必须出现并且按定义顺序出现


    <!ELEMENT 家庭 (人+,家电)>
      如果去掉* 则含义是定义时必须有家电

    属性定义
      如果dtd文件没有定义属性 则在xml文件里加入属性时会报错
    <!ATTLIST 元素名称
      属性名称 类型 属性特点
      属性名称 类型 属性特点...
    >
    类型分析:

      CDATA      属性值可以是任何字符(包括数字和中文)
      ID         这个属性的值必须是唯一的(对于同此类型的标签),并且以字母开头
      IDREF/IDREFS  id引用
      IDREF       属性值指向文档中其它地方声明的ID类型的值
      IDREFS同 IRREF 但可以具有由空格分开的多个引用
      Enumerated   枚举 在几个值里取值 性别

    属性特点
      #REQUIRED   该属性必须有
      #IMPLIED    该属性可有可无
      #FIXED value    该属性的值必须为此固定值
      Defalut value     不给则取默认值

    写法:  就近原则 对元素指定属性
    <!ELEMENT class (student+)>
    <!ATTLIST student
    address CDATA #REQUIRED
    >

    <!ATTLIST person sex(boy|girl) #REQUIRED>


    ENTITY/ENTITIES 实体定义

      用于为一段内容创建一个别名,以后再xml文档中就可以使用别名引用这段内容
    在DTD定义中,一条<!ENTITY ...>语句用于定义一个实体
    实体可以分为两种类型
      引用实体参数实体
    引用实体
    1.在DTD中定义
      <!ENTITY 实体名 内容>
        <!ENTITY sto "个人介绍">
    2.在xml引用   &实体名
      &sto; 引用符号 & 和结束分号;必须有

    参数实体
    1.在DTD中定义参数实体
      <!ENTITY % 实体名称 "实体内容">

    2.在DTD文件中自己使用
      %实体名;

    DTD案例:
    电视节目表 DTD
    <!DOCTYPE TVSCHEDULE [

    <!ELEMENT TVSCHEDULE (CHANNEL+)>
    <!ELEMENT CHANNEL (BANNER,DAY+)>
    <!ELEMENT BANNER (#PCDATA)>
    <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
    <!ELEMENT HOLIDAY (#PCDATA)>
    <!ELEMENT DATE (#PCDATA)>
    <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
    <!ELEMENT TIME (#PCDATA)>
    <!ELEMENT TITLE (#PCDATA)>
    <!ELEMENT DESCRIPTION (#PCDATA)>

    <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
    <!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
    <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
    <!ATTLIST TITLE RATING CDATA #IMPLIED>
    <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

    ]>
    根据DTD写出相应的xml文档

  • 相关阅读:
    ‘==’运算符和equals方法的区别
    ‘==’与equals的使用
    重写equals()方法的原则
    三目运算符---自动转换数据类型
    Spring安全框架——细粒度权限控制实现步骤
    Http协议学习笔记---Http协议介绍、协议格式、响应码说明
    Xml&Tomcat学习笔记03-----javaweb介绍、Tomcat介绍和使用
    Xml&Tomcat学习笔记02-----IDEA配置TomCat服务器
    Xml&Tomcat学习笔记01-----XML简介、语法、元素、属性、dom4j
    MVC概念
  • 原文地址:https://www.cnblogs.com/jiechn/p/4660168.html
Copyright © 2011-2022 走看看