javaWEb-day01(DTD约束语法细节)

来源:互联网 发布:贵州省百万公众网络 编辑:程序博客网 时间:2024/05/21 21:36

编写dtd文档的两种方式


dtd约束既可以作为一个单独文件编写,也可以在XML文件内编写


在XML文件内编写dtd

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE 书架 [<!ELEMENT 书架 (书+)><!ELEMENT 书 (书名,作者,售价)><!ELEMENT 书名 (#PCDATA)><!ELEMENT 作者 (#PCDATA)><!ELEMENT 售价 (#PCDATA)>]><书架><书><书名>Java就业培训教程</书名><作者>张孝祥</作者><售价>39.00元</售价></书>...</书架>

XML文件中,使用 DOCTYPE 声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:

当引用的文件在本地时,采用如下方式:硬盘

  <!DOCTYPE 文档根结点 SYSTEM  "DTD文件的URL">

  例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>

当引用的文件是一个公共的文件时,采用如下方式: 网络

  <!DOCTYPE 文档根结点 PUBLIC  "DTD名称"  "DTD文件的URL">

    例如:<!DOCTYPE web-app PUBLIC  "-//SunMicrosystems, Inc.//DTD Web Application 2.3//EN"  "http://java.sun.com/dtd/web-app_2_3.dtd">


DTD约束语法细节

元素定义

1.在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:

   <!ELEMENT 元素名称 元素类型>


2.元素类型可以是元素内容、或类型
   (1)如为元素内容:则需要使用()括起来,如

        <!ELEMENT书架(书名,作者,售价)>

        <!ELEMENT书名(#PCDATA)>

   (2)如为元素类型,则直接书写,DTD规范定义了如下几种类型:
       •EMPTY:用于定义空元素,例如<br/><hr/>
       •ANY:表示元素内容为任意类型。

3.元素内容中可以使用如下方式,描述内容的组成关系
   •逗号分隔,表示内容的出现顺序必须与声明时一致。
      <!ELEMENT MYFILE(TITLE,AUTHOR,EMAIL)>
   • | 分隔,表示任选其一,即多个只能出现一个

      <!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>

   •元素内容使用空白符分隔,表示出现顺序没有要求
      <!ELEMENT MYFILE (TITLE AUTHOREMAIL)> *

4.在元素内容中也可以使用+、*、?等符号表示元素出现的次数

    +: 一次或多次 (书+)

    ?: 0次或一次 (书?)

    *: 0次或多次  (书*)


5.也可使用圆括号( )批量设置,例

   <!ELEMENT MYFILE ( (TITLE*, AUTHOR?, EMAIL)* | COMMENT)>


属性定义

1.XML文档中的标签属性需通过ATTLIST为其设置属性

2.语法格式

    <!ATTLIST 元素名

        属性名1 属性值类型 设置说明

        属性名2 属性值类型 设置说明

        ......

    >

3.属性声明举例

   <!ATTLIST 商品

       类别  CDATA  #REQUIRED

       颜色  CDATA  #IMPLIED

   >

4.对应XML文件:

   <商品 类别=“服装” 颜色=“黄色”>...</商品>

   <商品 类别="服装">...</商品>


5.设置说明
   •#REQUIRED:必须设置该属性
   •#IMPLIED:可以设置也可以不设置
   •#FIXED:说明该属性的取值固定为一个值,在XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值
   •直接使用默认值:在XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。  


6.举例

<!ATTLIST 页面作者 姓名 CDATA #IMPLIED 年龄 CDATA #IMPLIED 联系信息 CDATA #REQUIRED 网站职务 CDATA #FIXED "页面作者" 个人爱好 CDATA "上网"> 

7.常用属性值类型

    (1) CDATA:表示属性值为普通文本字符串。

    (2) ENUMERATED (枚举):属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值

<?xml version = "1.0" encoding="GB2312" standalone="yes"?><!DOCTYPE 购物篮 [<!ELEMENT 肉 EMPTY><!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">]> <购物篮><肉 品种="鱼肉"/><肉 品种="牛肉"/><肉/></购物篮>

    (3) ID (唯一的,只能以字母下划线开头,不能出现空白字符)

<?xml version = "1.0" encoding="GB2312" ?><!DOCTYPE 联系人列表[<!ELEMENT 联系人列表 ANY><!ELEMENT 联系人(姓名,EMAIL)><!ELEMENT 姓名(#PCDATA)><!ELEMENT EMAIL(#PCDATA)><!ATTLIST 联系人 编号 ID #REQUIRED>]><联系人列表><联系人 编号="a1"><姓名>张三</姓名><EMAIL>zhang@it315.org</EMAIL>     </联系人><联系人 编号="a1"><姓名>李四</姓名><EMAIL>li@it315.org</EMAIL></联系人></联系人列表>

    (4) ENTITY (实体)

  • 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
  • 在DTD定义中,一条<!ENTITY ...>语句用于定义一个实体。
  • 实体可分为两种类型:引用实体参数实体



实体定义:

引用实体:

引用实体主要在 XML 文档中被应用。

  • 语法格式
            <!ENTITY 实体名称 “实体内容” >:直接转变成实体内容
  • 引用方式:
            &实体名称;
  • 举例:
            <!ENTITY  copyright  “I am a programmer"> 
             ……
             &copyright;


参数实体:

参数实体被 DTD 文件自身使用。

  • 语法格式:
            <!ENTITY % 实体名称 "实体内容" >
  • 引用方式:
            %实体名称;
  • 举例1:
            <!ENTITY  %  TAG_NAMES  "姓名 | EMAIL | 电话 | 地址">

            <!ELEMENT 个人信息 (%TAG_NAMES; | 生日)>
            <!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>
  • 举例2:

           定义实体:

            <!ENTITY  %  common.attribute  

                                   " id  ID  #IMPLIED 

                                   account  CDATA  #REQUIRED "
            >
            ...

            应用:

          1. <!ATTLIST  purchaseOrder  %common.attributes;>

相当于:

              <!ATTLIST  purchaseOrder  

                                   id  ID  #IMPLIED 

                                   account  CDATA  #REQUIRED

              >


          2. <!ATTLIST  item  %common.attributes;>

相当于:

              <!ATTLIST  item  

                                   id  ID  #IMPLIED 

                                   account  CDATA  #REQUIRED

              >


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩不愿意喝奶粉爱喝乳酸菌怎么办 长安通不记名卡丢了怎么办 农村电表箱里的开关坏了怎么办 建行手机银行登录密码忘了怎么办 手机银行登入密码忘记了怎么办 邮政手机银行登录密码忘了怎么办 建设手机银行登入密码忘记了怎么办 浪琴机械表秒针走的快怎么办 雷达晶萃陶瓷表镀金掉色怎么办 做信息稿部分人员没拍到照片怎么办 二建条件不够考后审核怎么办 学校官网的教务系统忘记密码怎么办 已参加两次高考失败还想复读怎么办 我高考失利想补习学藉怎么办 本科毕业证上是1寸照片怎么办 老婆父母不给户口本迁户口怎么办 深圳夫妻投靠双方再婚的网上怎么办 老人档案丢了要继承公证怎么办 农民把户口迁入城市后宅基地怎么办 离婚了再婚带孩子在上海上学怎么办 上班几天被公司辞退不发工资怎么办 在单位工作被领导边缘化该怎么办 退休人员户口迁到外地退休金怎么办 招工表填写和实际的有误怎么办 招工时档案年龄有人为改动怎么办 8个月宝贝还不会坐怎么办 朗动导航黑屏过了保修期怎么办 平板突然黑屏开不了机了怎么办 苹果ipad锁屏密码忘了怎么办 公司发资以两张工资表怎么办 面试谈好的工资结果发少了怎么办 老板面试没谈薪资让等电话怎么办 土地局把我的档案弄丢了怎么办 人事关系在医院不去上班怎么办 档案年龄多处涂改无法退休怎么办 个人办理退休原始档案丢了怎么办 在钢厂工作想辞职了怎么办呢 场地合同到期了公司不续签怎么办 应届生没毕业找到工作怎么办入职 公司工资保密同事要看工资条怎么办 考上特岗教师后和老公异地怎么办