zoukankan      html  css  js  c++  java
  • dtd约束

    dtd快速入门

    创建dtd文件对上一篇的XML代码进行约束,代码如下,文件名为Demo1.dtd

    1 <!ELEMENT person (name,age)>
    2 <!ELEMENT name (#PCDATA)>
    3 <!ELEMENT age (#PCDATA)>

    上面的XML代码修改为

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE person SYSTEM "Demo1.dtd">  //加入了这句
    3 <person>
    4     <name>张三</name>
    5     <age>23</age>
    6     
    7 </person>

    需要注意的地方:

    约束在浏览器中打开不起作用,因为浏览器只负责校验XML语法,不负责校验约束,所以我们需要用到工具,我用的是myeclipse2017。

    创建java项目,将xml文件和dtb文件都放到src下即可实现校验

    dtd的三种引入方式

    (1)引入外部dtd文件(即上面用到的)

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

    (2)使用内部的dtd文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE person [
     3     <!ELEMENT person (name,age)>
     4     <!ELEMENT name (#PCDATA)>
     5     <!ELEMENT age (#PCDATA)>
     6 ]>
     7 
     8 <person>
     9     <name>张三</name>
    10     <age>23</age>    
    11 </person>

    (3)使用外部的dtd文件

    <!DOCTYPE 根元素  PUBLIC "dtd文件名称" "网络路径">

    使用dtd定义元素

    * 语法: <!ELEMENT  元素名  约束>

    * 简单元素 :没有子元素的元素

          <!ELEMENT  name  (#PCDATA)>

          ***  (#PCDATA):约束name是字符串

          ***   EMPTY  :  元素为空

             ***  ANY: 任意

    * 复杂元素 

    <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

    当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。

    声明只出现一次的元素

    <!ELEMENT 元素名称 (子元素名称)>

    声明最少出现一次的元素

    <!ELEMENT 元素名称 (子元素名称+)>

    声明出现零次或多次的元素

    <!ELEMENT 元素名称 (子元素名称*)>

    声明出现零次或一次的元素

    <!ELEMENT 元素名称 (子元素名称?)>

    声明多个元素只能出现其中一个

    <!ELEMENT 元素名称 (子元素名称1 | 子元素名称2)>

    dtd属性

    语法

    <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>

    示例

    <!ATTLIST birthday ID1 CDATA #REQUIRED>

    表示的事birthday的ID1这个属性为字符数据,而且属性值是必须出现的

     下面两个表格分别对应了属性类型及约束

    实体的定义

    语法:

    <!ENTITY 实体名称 "实体的值">

    示例:

    <!ENTITY writer "Bill Gates">

    使用实体:

    <author>&writer;</author>

    注意一般实体定义写在内部dtd里,因为外部dtd在某些浏览器下不支持

    外部定义格式为:

    <!ENTITY 实体名称 SYSTEM "URI/URL">

    案例演练

    下面是w3cSchool上的一个实例

    电视节目表 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>
    
    ]>

    当我们可以对照这敲出对应的XML代码,就说明我们基本掌握了

    <?xml version="1.0" encoding="UTF-8"?>
    <!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>
    ]>
    
    <TVSCHEDULE NAME="CCTV">
        <CHANNEL CHAN="AAA">
            <BANNER>HHHH</BANNER>
            <DAY>
                <DATE>2018-7-26</DATE>
                <HOLIDAY>556</HOLIDAY>
                <PROGRAMSLOT VTR="saklda">
                    <TIME>12-23</TIME>
                    <TITLE>hello</TITLE>
                </PROGRAMSLOT>
            </DAY>
        </CHANNEL>
    </TVSCHEDULE>
  • 相关阅读:
    2019-2020-1 20175323 实验四 外设驱动程序设计
    2019-2020-1 20175323 实验三 并发程序
    2019-2020-1-20175332 20175323 20175228-实验二固件程序设计
    2019-2020-1 20175323 20175332 20175228 实验一开发环境的熟悉
    20175323 团队项目 服务器端函数功能与业务逻辑详解
    2018-2019-2-20175323 java实验五 网络编程与安全
    2018-2019-2-20175323 java实验四 Android程序设计
    2018-2019-2-20175323 java实验三敏捷开发与XP实践
    2018-2019-2-20175323 java实验二《Java面向对象程序设计》
    2018-2019-2 20175323 实验一《Java开发环境的熟悉》实验报告
  • 原文地址:https://www.cnblogs.com/StriveE2/p/9368531.html
Copyright © 2011-2022 走看看