JavaWeb——XML

介绍

  约束:规定xml文档的书写规则

分类

  1.DTD:一种简单的约束技术

  2.Schema:复杂的约束技术

  

1.DTD文档

  <!ELEMENT students (student * ) >

  <!ELEMENT sutdent (name , age , sex)>

  <!ELEMENT name (#PCDATA)>

  <!ELEMENT age (#PCDATA)>

  <!ELEMENT sex (#PCDATA)>

  <!ATTLIST student number ID #REQUIRED>

 

解析

  ELEMENT:定义标签

  ATTLIST:定义属性

 

  <!ELEMENT 标签名  (子标签名  , 子标签名,子标签名 ..... [ * ] )  >

  定义标签 标签名 (子标签名 [数量] )

 

  <!ELEMENT 标签名 (#PCDATA)>

  #PCDATA :字符串

  

  <!ATTLIST  标签名 属性名 属性类型 #REQUIRED>

  <!ATTLIST student number ID #REQUIRED>

  给student标签添加属性,number id类型 必须有

 

  简单记忆:<!ELEMENT 标签名 (子标签或者值类型)> 

          <!ATTLIST 标签名 属性名 属性类型 约束>

引入

  1.内部data:不常用

  2.外部data:将约束的规则定义在外部的dtd文件中

    本地:<!DOCTYPE 跟标签名 SYSTEM “dtd文件的位置”>

    网络:<!DOCTYPE  根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">

  

使用

  

// dtd
<!ELEMENT students (student *)>
<!ELEMENT student (name,age ,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>


// xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">

<students>
    <student number="s001">
        <name>陈威</name>
        <age>22</age>
        <sex>男</sex>
    </student>

    <student number="s002">
        <name>张树</name>
        <age>20</age>
        <sex>男</sex>
    </student>
</students>

 

 

2.Schema

  更复杂的xml约束,比dtd能做到内容的限定( 约束后缀名 .xsd)

  首先定义<schema>头

  

<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.javaswing.xyz/person4"
        elementFormDefault="qualified">
    
    <!--  1.<schema>标签起头  -->
    <!-- xmlns:="http://www.w3.org/2001/XMLSchema"  schema约束遵循 w3c组织的规范-->
    <!-- 2.targetNamespace="http://www.javaswing.xyz/person4 " targetNamespace是名称空间 -->
    <!-- 通常把这个文档定义的约束绑定到一个URL上,这个地址就叫名称空间。 名称空间是用来唯一标识schema的地址
    ,区分不同shema中同名元素和属性 --> <!-- 3.固定写法:elementFormDefault="qualified" --> </schema>

 

其次定义<element>,分为简单元素和复杂元素。

 

  简单元素 

介绍

  

 <element name="persons"></element>
 <element name="human"></element>
 <element name="animal"></element>

 <!--  <element name="persons"></element> -->
 <!-- 标签<element> -->
 <!-- 属性 name="" 标签名-->
<!-- 一个元素如果包含子元素和属性,就是简单元素,反之就是复杂元素。-->

  

  复杂元素

介绍

  

 <element name="name" type="string" minOccurs="1" maxOccurs="unbounded"/

<!-- 被包裹在其他元素之间的子元素是复杂元素 -->
<!-- 属性 -->
<!-- name=“标签名”  -->
<!-- type="数据类型" -->
<!-- minOccurs="最少出现次数" -->
<!-- maxOccurs="最多出现次数" -->

  

   复杂类型complexType,这里的sequence元素规定了子元素出现的顺序,需要注意的是,即使是只有一个子元素的元素,定义语法也为

介绍

 

<element name="person">
                    <complexType>
                        <sequence>
                            <element name="name" type="string" minOccurs="1" maxOccurs="unbounded"/>
                            <element name="age" type="string" minOccurs="1" maxOccurs="unbounded"/>
                            <element name="sex" type="string" minOccurs="1" maxOccurs="unbounded"/>
                        </sequence>
                    </complexType>
                </element>

 

  <element>数据属性

 介绍

  type: 数据类型  (复杂元素)

    

  maxOccurs:标签最多出现次数 

  minOccurs:标签最少出现次数  

  

       <element>内定义的属性

介绍

  这里的属性类型若不注明,则认为属性是可选的(即不强制要求存在)。除此之外,属性类型一般分为三种:

  • 必选:语法为:

    <attribute name="属性名称" type="数据类型" use="required"></attribute>
    
  • 有默认值:语法为:

    <attribute name="属性名称" type="数据类型" default="默认值"></attribute>
    
  • 有固定值:语法为:

    <attribute name="属性名称" type="数据类型" fixed="固定值"></attribute>
    

对于包含属性的元素,前面说过属于复杂元素(即使这个元素只含属性不含子元素),因此定义应为:

<element ...>
    <complexType>
        <attribute ...></attribute>
    </complexType>
</element>

 

  引入

介绍

  1. 使用名称空间引入:xmlns

xmlns="http://www.javaswing.xyz/person4"

  

  2.再声明这个文档是应用Schema约束技术的一个实例 

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

  

  3.指定Schema文档的位置进行引用

xsi:schemaLocation="名称空间 Schema文件名"  

 

完整Schema约束

<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.javaswing.xyz/person4"
        elementFormDefault="qualified">
    
    <element name="persons">
        <complexType>
            <sequence>
                <element name="person">
                    <complexType>
                        <sequence>
                            <element name="name" type="string" minOccurs="1" maxOccurs="unbounded"/>
                            <element name="age" type="string" minOccurs="1" maxOccurs="unbounded"/>
                            <element name="sex" type="string" minOccurs="1" maxOccurs="unbounded"/>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>


// xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<persons xmlns="http://www.javaswing.xyz/person4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.javaswing.xyz/person4 person4.xsd">
<person id="001">
<name>陈威</name>
<age>22</age>
<sex>male</sex>
</person>

<person id="002">
<name>张树</name>
<age>21</age>
<sex>male</sex>
</person>

<person id="003">
<name>陈晨</name>
<age>20</age>
<sex>male</sex>
</person>
</persons>

   

  总结:element分为简单元素和复杂元素。

        一个元素包含子标签就是简单元素。 

        元素都有 name 和 minOccurs 和 maxOccures, 复杂元素才有 type。

     复杂元素的属性和标签包含在

    <element name="person" >

      <compleType>

        <squence>

          复杂元素 <element>  

        </squence>

          属性  <attribute>

      </compleType>  

    </element>  

    

    Schema就是通过简单元素和复杂元素定义规则,其他不用去记

    

参考网址:https://www.jianshu.com/p/1e35c15d0cb8

posted @ 2021-09-07 18:18  remix_alone  阅读(47)  评论(0)    收藏  举报