XML约束

JAVA学习网 2019-01-17 00:05:01

1 XML约束

  1.1 DTD语法自称一派,可读性较差

  1.2DTD引入的方式  

<?xml version="1.0" encoding="UTF-8" ?>
<!--引入dtd来约束这个xml-->
<!--方式一-->
<!--文档类型  跟标签名字 网络上的dtd dtd的名称 dtd的路径-->
<!--<!DOCTYPE stus PUBLIC "//unknown/" "unknown.dtd">-->
<!--方式二-->
<!--引入本地的DTD :跟标签名称 引入本地的DTD dtd的位置-->
<!--<!DOCTYPE stus SYSTEM "stus_copy.dtd">-->

<!--方式三-->
<!DOCTYPE stus [
        <!ELEMENT stus (stu)>
        <!ELEMENT stu (name,age,address)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT address (#PCDATA)>
        ]>

<stus>
    <stu >
        <name>张三</name>
        <age>23</age>
        <address>北京</address>
    </stu>
    <stu>
        <name>李四</name>
        <age>24</age>
        <address>上海</address>
    </stu>
</stus>

  stus_copy.dtd

<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age,address)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT address (#PCDATA)>

 

  

  1.2Schema其实就是一个xml,使用xml的语法规则,xml解析器 解析起来比较方便,Schema约束文本内容比DTD内容还要多,没有真正意义替代DTD

   

约束文档:

    <!-- xmlns  :  xml namespace : 名称空间 /  命名空间

    targetNamespace :  目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。 

    elementFormDefault : 元素的格式化情况。  -->

    <schema xmlns="http://www.w3.org/2001/XMLSchema" 

        targetNamespace="http://www.baidu.com/teacher" 

        elementFormDefault="qualified">

        

        <element name="teachers">

            <complexType>

                <sequence maxOccurs="unbounded">

                    <!-- 这是一个复杂元素 -->

                    <element name="teacher">

                        <complexType>

                            <sequence>

                                <!-- 以下两个是简单元素 -->

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

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

                            </sequence>

                        </complexType>

                    </element>

                </sequence>

            </complexType>

        </element>

    </schema>



实例文档:

    <?xml version="1.0" encoding="UTF-8"?>

    <!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。

    xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间

    xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。

     -->

    <teachers

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xmlns="http://www.baidu.com/teacher"

        xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd"

    >

        <teacher>

            <name>zhangsan</name>

            <age>19</age>

        </teacher>

        <teacher>

            <name>lisi</name>

            <age>29</age>

        </teacher>

        <teacher>

            <name>lisi</name>

            <age>29</age>

        </teacher>

    </teachers>

 

  1.2.1命名空间的作用

    一个xml如果想指定它的约束规则, 假设使用的是DTD ,那么这个xml只能指定一个DTD , 不能指定多个DTD 。 但是如果一个xml的约束是定义在schema里面,并且是多个schema,那么是可以的。简单的说: 一个xml 可以引用多个schema约束。 但是只能引用一个DTD约束。

名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。 默认情况下 ,如果只有一套规则,那么都可以这么写

<name>张三</name>

<aa:name></aa:name>
<bb:name></bb:name>

 

阅读(3043) 评论(0)