美文网首页
XML的DTD约束

XML的DTD约束

作者: 免费的午餐 | 来源:发表于2018-10-10 11:28 被阅读0次

    什么是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约束。

    相关文章

      网友评论

          本文标题:XML的DTD约束

          本文链接:https://www.haomeiwen.com/subject/bqlpaftx.html