XML的DTD约束

什么是XML的约束:在xml语言书写的时候,我们写一个规范文档,然后让xml文件按照我们的规范进行书写,这个规范就是xml的约束。

为什么我们需要xml约束呢,说白了就是如果没有一个约束 你可以随便写,没有一定的规则就乱了套了,xml的约束分为DTD和Schema两种常用方式。

DTD(Doucument Type Definition),全称为文档类型定义;

定义一个DTD文件book.dtd

文件内容为:

        <!ELEMENT 书架 (书+)>  该句的意思是声明一个元素为“书架” 书架这个元素内包括“书”标签,+表示有一个或多个书标签;

            <!ELEMENT 书 (书名,作者,售价)> 该句意思声明一个“书”标签 ,该标签包含“书名”、“作者”、“售价”三个标签;

        <!ELEMENT 书名 (#PCDATA)> 该句声明一个“书名”标签,标签中包含的内容为字符串内容;

        <!ELEMENT 作者 (#PCDATA)> 该句声明一个“作者”标签,标签中包含的内容为字符串内容;

        <!ELEMENT 售价 (#PCDATA)> 该句声明一个“售价”标签,标签中包含的内容为字符串内容;

注意:如果我们的dtd文件中包含中文,那么我们保存该文件的时候要用utf-8编码格式保存。

xml文档怎么引用这个dtd约束文件呢,在xml文档中顶部<?xml version="1.0"?>的下一行写<!DOCTYPE 书架 SYSTEM “book.dtd">

DTD约束文件的语法:

在我们上面写了一个dtd约束文件,现在我们来了解一下dtd约束文件的语法。

我们先来说一下引用dtd约束文件,xml文件使用DOCTYPE声明语句来指明它所遵循的约束文件,DOCTYPE声明语句有两种形式:

1,当引用的文件在本地时,采用<!DOCTYPE 文件根节点 SYSTEM "DTD文件是url">方式;

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

2,当引用的文件是一个公共的文件时,采用<!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL">

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

DTD语法细节:

元素定义:

在dtd文档中使用element声明一个xml元素,语法格式:<!ELEMENT 元素名称 元素类型>

元素类型可以是元素内容或类型;

元素内容:则需要使用()括起来,如<!ELEMENT 书架(书名,作者,售价)>,<!ELEMENT 书名 (#PCDATA)>

元素类型: 则直接书写,DTD规范定义了如下几种类型

  • EMPTY:用于定义空元素,例如
  • ANY:表示元素内容为任意类型;
    元素内容中描述内容的组成关系:
    用逗号分隔,表示内容的出现顺序必须和声明的一致。
    用|分隔,表示任选其一,即多个只能出现一个。
    在元素内容中可以使用+、*、?等符号表示元素出现的次数;
    +:表示一次或多次
    ?:0次或一次
    *:0次或多次
    可以用括号()批量设置,如<!ELEMENT MYFILE ( (TITLE*,AUTHOR?,EMAIL)* | COMMENT )>

元素属性定义:

xml文档中的标签属性需要通过ATTLIST为其设置属性。

语法格式:

<!ATTLIST 元素名 

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

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

        ......

        >

属性声明举例:

<!ATTLIST 商品

        类别  CDATA  #REQUIRED

        颜色  CDATA   #IMPLIED

>

对应的xml文件应该这样写:

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

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

属性说明有一下几种设置:

#required:表示该属性必须设置

#implied: 表示该属性设置或不设置都可以

#fixed:表示该属性的取值固定为一个值,在xml文件中不能为该属性设置其他值。但是需要为该属性提供这个值。

直接使用默认值:在xml文件中可以设置该值也可以不设置该属性值。若没有设置则使用默认值。

举例:

<!ATTLIST   页面作者

    姓名 CDATA  #IMPLIED

    年龄 CDATA  #IMPLIED

    联系方式  CDATA #REQUIRED

    网站职务  CDATA  #FIXED  "页面作者"

    个人爱好  CDATA  "聊天"   >

属性值类型:

1,CDATA  表示属性值是普通文本字符串

2,ENUMERATED  枚举

3,ID  表示属性的设置值为一个唯一值,id属性的值只能由字母、下划线开始,不能出现空白字符。

4,ENTITY  实体,用于为一段内容创建一个别名,以后在xml文档中就可以使用别名引用这段内容了。

在DTD中怎么定义实体呢?用<!ENTITY ...> 语句用于定义一个实体。实体分为两种类型:引用实体和参数实体。

引用实体主要在xml文档中被应用,语法格式为<!ENTITY 实体名称 “实体内容" >,引用方式是"&实体名称;"

参数实体被DTD文件本身使用的,语法格式为<!ENTITY % 实体名称 "实体内容" >,引用方式是“%实体名称;”

DTD 约束是不能约束数字的,所以,DTD约束在逐渐被淘汰,替代他的是Schema约束。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352