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>
  • 相关阅读:
    Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级 郑州
    NET项目反编译+VS解决方案整理流程 郑州
    iis 目录枚举文件枚举解决方案 郑州
    Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录 郑州
    SqlServer mssql 按月统计所有部门 郑州
    无法获得数据库 'model' 上的排他锁 解决方法 郑州
    Asp.Net Core 2.0 项目实战(5)Memcached踩坑,基于EnyimMemcachedCore整理MemcachedHelper帮助类。 郑州
    谈谈前端怎样布局切图,程序可以方便快捷添加程序 郑州
    各种UIColor颜色的设置
    iOS
  • 原文地址:https://www.cnblogs.com/StriveE2/p/9368531.html
Copyright © 2011-2022 走看看