前言
今天天气大好, 起了个大早开始总结一些常用的基础知识. 
XML一直来说都很陌生, 使用大多是用于配置文件, 之前并没有细究过其中的约束规范, 今天刚好没事来学习并总结下. 
1,XML基础介绍
  XML 指可扩展标记语言(EXtensible Markup Language),也是一种标记语言,很类似 HTML.它的设计宗旨是传输数据,而非显示数据它;标签没有被预定义,需要自行定义标签。
  xml的作用:
    XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。简单的说,我们在开发中使用XML主要有以下两方面应用.
           a.XML做为数据交换的载体,用于数据的存储与传输
    b.XML做为配置文件
2,书写规范
注意事项:
    xml必须有根元素(只有一个)
xml标签必须有关闭标签
xml标签对大小写敏感
xml的属性值须加引号
特殊字符必须转义
xml中的标签名不能有空格
空格/回车/制表符在xml中都是文本节点
xml必须正确地嵌套
    我们将符合上述书写规则的XML叫做格式良好的XML文档。
在讲述XML组成部分前,我们必须对XML的树型结构有所了解.下面是一个简单的XML
<bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
对于一个xml文件,首先必须要有根元素,该元素是所有其它元素的父元素。而在xml中所有元素形成了一棵树。父,子及同胞等术语描述了元素之间的关系。所有的元素都可以拥有子元素。相同层级上的子元素成为同胞。
所有元素都可以拥有文本内容和属性。
    Root  根元素
    Element 元素
    Attribute 属性
    Text  文本
在开发中,我们将上述内容也统称为Node(节点)。
3,xml的作用详解  
    1.不同语言之间交换数据-- 用数据库代替
    2.配置文件-- ☆
xml的约束:
        作用:明确的告诉我们那些元素和属性可以写,以及他们的顺序如何.
        分类:DTD约束和SCHEMA约束
        要求:给你xml约束你可以写出对应的xml文档即可.
        1, DTD约束:struts hibernate
            与xml文档的关联:
                方式1:内部关联
                    格式:<!DOCTYPE 根元素名称 [dtd的语法]>
                方式2:外部关联--系统关联
                    格式:<!DOCTYPE 根元素名称 SYSTEM  "dtd路径">
                    dtd的后缀名是 .dtd
                方式3:外部关联--公共关联
                    格式:<!DOCTYPE 根元素名称 PUBLIC "dtd的名称" "dtd路径">
                
            元素:
                格式1:<!ELEMENT 元素的名称 (内容)>
                格式2:<!ELEMENT 元素的名称 类别>
            属性:
                格式:<!ATTLIST 元素的名称 属性的名称 类型 默认值>
                属性的类型:
                    ID:唯一
                    CDATA:文本
                默认值:
                    REQUIRED:必须出现
                    IMPLIED:可以选择
            类别:
                #PCDATA:文本是一个字符串,不能出现子元素 ,用的时候用(#PCDATA)
            符号:
                +     >=1
                ?     0|1
                *     任意值
                |     选择
                ()    分组
                ,     顺序
DTD约束示例代码:
 
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE bookstore[ <!ELEMENT bookstore (book+)> <!ELEMENT book (title,author,year,price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST book category CDATA #REQUIRED> <!ATTLIST title lang CDATA #IMPLIED> ]> <bookstore> <book category="COOKING" > <title lang="en" >Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
        2,SCHEMA约束:spring
            作用:用来替代dtd的,多个schema可以出现一个xml文档上
            需求:    
                xml 文档中出现了<table>
                a约束上的---table :桌子 属性  height width
                b约束上的---table :表格 属性  rows  cols
            名称空间:
                作用:用来确定标签的约束来自于那个约束文档上
                格式:
                    方式1:xmlns="名称"
                    方式2:xmlns:别名="名称"
                例如:
                    table  代表的是桌子
                    b:table 代表的就是表格  
            schema的语法:
                后缀名.xsd
                关联
                    1.约束文件的关联 bookstore.xsd
                        xmlns="http://www.w3.org/2001/XMLSchema"-- 固定值,自定义的约束文件可以出现那些标签
                        targetNamespace="http://www.example.org/bookstore"
                        给当前的xsd起个名称空间,方便目标xml文件引用,名字可以随便起,一般使用域名/自定义名称既可以
                        
                        例如: targetNamespace="bookstore"
                            targetNamespace="http://www.augmentum.com/bookstore"
                        
                        确定一个目标xml根元素
                            <element name="bookstore"></element>
                            
                    2.xml文件的关联
                        写根标签
                        添加schema约束
                            1.xmlns="约束的名称空间" -- 值为xsd文件上的targetNamespace的内容
                        例如:    
                            xmlns=="http://www.augmentum.com/bookstore"
                            
                            2.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" :固定的写法 声明此文档是一个被schema约束的文件
                            3.确定文档的位置
                                xsi:schemaLocation="{和xsd文件中的targetNamespace} {xsd文件的路径}"
                    关联小结:
                        先有约束文件. .xsd
                            targetNamespace 就是给当前的约束文件起个名字,方便xml使用
                            必须确定根元素
                        后有xml文件.
                            写根元素
                            添加约束
                                xmlns="名字"  他的值为targetNamespace中起的名称
                                xsi:schemaLocation="名字 位置"
                    语法:
                        1.确定根元素
                            <element name >
                            name:元素的名称
                            type:元素的数据类型
                        2.确定元素类型 
                            复杂的元素
                                <complexType>
                            简单的元素 -- 几乎看不见
                                <simpleType>
                        3.确定顺序:
                            <sequence maxOccurs="3">  按次序 相当于  dtd 中,
                            <all> 随意
                            <choice> 或 相当于dtd中的 |
                            
                            maxOccurs 最大的出现次数    值为unbounded指的是无上限
                            minOccurs 最小的出现次数
                        4.确定属性
                            <attribute name="category" type="string" use="required" />
                            name :属性的名称
                            type:属性的数据类型
                            use 相当于dtd中 默认值
                                值为required:必须出现
                                值为optional:可选
                                
                        5.若有属性的元素,内容只是文本
                            <complexType>  --- 指定元素为复杂类型
                                <simpleContent>--- 指定元素是一个简单的内容,只有文本
                                    <extension base="string">    -- 文本内容进行扩展
                                        <attribute name="lang" type="string" /> -- 添加属性
                                    </extension>
                                </simpleContent>
                            </complexType>
Schema约束示例:
 
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="aaa" xmlns:tns="http://www.example.org/bookstore" elementFormDefault="qualified"> <element name="bookstore" > <!-- 1.确定根元素 <element name > name:元素的名称 type:元素的数据类型 2.确定元素类型 复杂的元素 <complexType> 简单的元素 -- 几乎看不见 <simpleType> 3.确定顺序: <sequence maxOccurs="3"> 按次序 相当于 dtd 中, <all> 随意 <choice> 或 相当于dtd中的 | maxOccurs 最大的出现次数 值为unbounded指的是无上限 minOccurs 最小的出现次数 4.确定属性 <attribute name="category" type="string" use="required" /> name :属性的名称 type:属性的数据类型 use 相当于dtd中 默认值 值为required:必须出现 值为optional:可选 --> <complexType> <sequence maxOccurs="unbounded" minOccurs="1"> <element name="book"> <complexType> <sequence> <element name="title"> </element> <element name="author" type="string" /> <element name="year" type="date" /> <element name="price" type="double" /> </sequence> <attribute name="category" type="string" use="optional" /> </complexType> </element> </sequence> </complexType> </element> </schema>
<?xml version="1.0" encoding="UTF-8"?> <bookstore xmlns="aaa" xsi:schemaLocation="aaa bookstore.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> </bookstore>
原文:http://www.cnblogs.com/wang-meng/p/5374498.html