xml的约束的技术 :dtd约束

 * xml的约束的技术 : dtd约束 和 schema约束 (看懂)

12、dtd的快速入门
    * 创建一个文件 后缀名 .dtd

    步骤:
        (1)看xml中有多少个元素 ,有几个元素,在dtd文件中写几个 <!ELEMENT>


        (2)判断元素是简单元素还是复杂元素
            - 复杂元素:有子元素的元素 person属于复杂元素
                <!ELEMENT 元素名称 (子元素)>
            - 简单元素:没有子元素
                <!ELEMENT 元素名称 (#PCDATA)>


        (3)需要在xml文件中引入dtd文件
            <!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">

 
    ** 打开xml文件使用浏览器打开的,浏览器只负责校验xml的语法,不负责校验约束

就是如果语法没错的话是不能约束的住的,采用eclipse 约束工具

    ** 如果想要校验xml的约束,需要使用工具(eclipse工具)

    ** 打开eclipse开发工具
        *** 创建一个项目 day05
        *** 在day05的src目录下面创建一个xml文件和一个dtd文件
        *** 当xml中引入dtd文件之后,比如只能出现name age,多写了一个a,会提示出错

eclipse中查看xml的方式

1 方式一:

方式二:

 

把上面的路径copy 到浏览器中去也是可以查看的

创建dtd文件

<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>

把dtd 文件引入进去

如果随便加入元素的话,就会报错

 

13、dtd的三种引入方式
    (1)引入外部的dtd文件
        <!DOCTYPE 根元素名称 SYSTEM "dtd路径">


    (2)使用内部的dtd文件
        - <!DOCTYPE 根元素名称 [
            <!ELEMENT person (name,age)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
        ]>


    (3)使用外部的dtd文件(网络上的dtd文件)
        <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
        - 后面学到框架 struts2 使用配置文件 使用 外部的dtd文件
        - <!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    
           "http://struts.apache.org/dtds/struts-2.0.dtd">

14、使用dtd定义元素
    * 语法: <!ELEMENT 元素名 约束>

    * 简单元素:没有子元素的元素
        <!ELEMENT name (#PCDATA)>
        *** (#PCDATA): 约束name是字符串类型
        *** EMPTY : 元素为空(没有内容)
            - <sex></sex>


        *** ANY:任意


    * 复杂元素:
        <!ELEMENT person (name,age,sex,school)>
            - 子元素只能出现一次
        * <!ELEMENT 元素名称 (子元素)>

        * 表示子元素出现的次数
            + : 表示一次或者多次


            ? :表示零次或者一次

             * :表示零次或者多次(随便有多少次)
        
        * 子元素直接使用“,”进行隔开 , 表示元素出现的顺序

   

子元素直接使用"|" 隔开表示元素只能出现其中的任意一个

    
15、使用dtd定义属性
    * 语法: <!ATTLIST 元素名称
            属性名称 属性类型 属性的约束
         >


    
 

l属性值类型:

CDATA:表示属性的取值为普通的文本字符串

 - CDATA: 字符串
            -     <!ATTLIST birthday
                ID1 CDATA #REQUIRED
            >

ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)

- 枚举 : 表示只能在一定的范围内出现值,但是只能每次出现其中的一个
            ** 红绿灯效果(就是每一个次只能是出现一个)
            ** (aa|bb|cc)
            - <!ATTLIST age
                ID2 (AA|BB|CC)  #REQUIRED
            >

ID:表示属性的取值不能重复,属性的值只能由字母,下划线开始,不能出现空白字符

        - ID: 值只能是字母或者下划线开头
            - <!ATTLIST name
                ID3 ID   #REQUIRED
            >

属性约束设置说明

#REQUIRED:表示该属性必须出现

#IMPLIED:表示该属性可有可无

#FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"

•直接值:表示属性的取值为该默认值


    * 属性的约束
        - #REQUIRED:属性必须存在

        - #IMPLIED:属性可有可无

        - #FIXED: 表示一个固定值 #FIXED "AAA"
            - 属性的值必须是设置的这个固定值
            - <!ATTLIST sex
                ID4 CDATA #FIXED "ABC"
            >
        - 直接值
            * 不写属性,使用直接值
            * 写了属性,使用设置那个值
            - <!ATTLIST school
                ID5 CDATA "WWW"
            >

16、实体的定义
    * 语法: <!ENTITY 实体名称 "实体的值">
    *** <!ENTITY TEST "HAHAHEHE">
    *** 使用实体 &实体名称;  比如 &TEST;

    ** 注意
        * 定义实体需要写在内部dtd里面,
          如果写在外部的dtd里面,有某些浏览器下,内容得不到

猜你喜欢

转载自blog.csdn.net/qq_20610631/article/details/81206406