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>
  • 相关阅读:
    Security headers quick reference Learn more about headers that can keep your site safe and quickly look up the most important details.
    Missing dollar riddle
    Where Did the Other Dollar Go, Jeff?
    proteus 与 keil 联调
    cisco router nat
    router dhcp and dns listen
    配置802.1x在交换机的端口验证设置
    ASAv931安装&初始化及ASDM管理
    S5700与Cisco ACS做802.1x认证
    playwright
  • 原文地址:https://www.cnblogs.com/StriveE2/p/9368531.html
Copyright © 2011-2022 走看看