XML约束

 dtd约束

    (1)看xml中有多晒个元素,就在dtd文件中写几个<!ELEMENT>

    (2)判断元素是简单元素还是复杂元素,看是否含有子元素

      - 简单元素:<!ELEMENT 元素名称 (#PCDATA)>

      - 复杂元素:<!ELEMENT 元素名称 (子元素名称)>

    (3)需要在xml文件中引入dtd文件

      <!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">

  * 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">

        - 后面学到框架 struct2 使用配置文件 使用 外部的dtd文件

  * 使用dtd定义元素

    ** 语法:<!ELEMENT 元素名 约束>

    ** 简单元素:没有子元素的元素

      <!ELEMENT name (#PCDATA)>

      *** (#PCDATA):约束name是字符串类型

      *** EMPTY:元素为空

      *** ANY:任意

    ** 复杂元素:

      <!ELEMENT 元素名称 (子元素)>

      * <!ELEMENT person (name+,age?,sex*,school)>

        +:表示一次或多次

        ?:表示零次或一次

        *:表示零次或多次 

      * 子元素直接使用逗号隔开,表示元素出现的顺序

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

  * 使用dtd定义属性

    * 语法:<!ATTLIST 元素名称

          属性名称 属性类型 属性约束

        >

    * 属性类型

      - CDATA:字符串

        <!ATTLIST name

          ID1 CDATA #REQUIRED

        >

      - 枚举:表示只能在一定的范围内出现值,但是每次只能出现其中的一个

        ** 红绿灯效果   (aa|bb|cc)

        <!ATTLIST hobby

          ID2 (aa|bb|cc) #REQUIRED

        >

      - ID:值只能是字母或者下划线开头

        <!ATTLIST name

          ID3 ID #REQUIRED

        >

   * 属性的约束

      - #REQUIRED:属性必须存在

      - #IMPLIED:属性可有可无

      - #FIXED:表示一个固定值,属性的值必须设置这个值  

        <!ATTLIST sex

          ID4 CDATA #FIXED "ABC"

        >  

        - 直接值

          * 不写属性使用直接值,写属性就使用设置的值

        <!ATTLIST school

          ID5 CDATA "www"

        >

Scheme约束

   简介

   (1)schema符合xml的语法、语句

   (2)一个xml中可以有多个schema,多个schema使用名称空间区分

   (3)schema里面可以支持更多的数据类型

   (4)schema语法更加复杂,暂时还不能替代dtd

 快速入门

      (1)创建一个schema文件,后缀名是 .xsd

          - 根节点<schema>

      (2)在schema文件里面

          - 属性 xmlns="http://www.w3.org/2001/XMLSchema" 

            - 表示当前xml文件是一个约束文件

          - targetNamespace="http://www.example.org/test"

            - 直接通过这个地址引入约束文件

          - xmlns:tns="http://www.example.org/test" elementFormDefault="qualified"

      步骤

        (1)看xml有多少个元素    <element>

        (2)看简单元素和复杂元素

          - 如果是复杂元素

            <complexType>

              <sequence>

                子元素

              </sequence>

            </complexType>

          - 简单元素,写在复杂元素的里面

            <element name="person">

            <complexType>

              <sequence>

                <element name="name" type="string"></element>

                <element name="age" type="int"></element>

              </sequence>

            </complexType>

          </element>

        (3)在被约束文件里面引入约束文件

          * xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

            - 表示xml是一个被约束文件

            - :xsi是避免重复而取得名字,可以随便取

          * xmlns="http://www.example.org/test"

            - 是约束文档里面的targetNamespace

          * xsi:schemaLocation="http://www.example.org/test test.xsd"

            - targetNamespace  空格  约束文档的地址路径

       * <sequence>:表示元素出现的顺序

       <all>:元素只能出现一次

       <choice>:元素只能出现其中的一个

       maxOccurs="unbounded":表示元素出现的次数

       <any></any>:表示任意元素

      * 可以约束属性

        ** 写在复杂元素里面

          写在</complexType>之前

          - name:属性名称

          - type:属性类型 int string

          - use:属性是否必须出现 required

复杂的schema约束

         

 

posted @ 2018-07-22 10:49  cmlx  阅读(116)  评论(0)    收藏  举报