XML

   第一部分:XML即可扩展标记语言,是由w3c组织发布的,XML出现的根本目标在于描述生活中经常出现的有关系的数据。在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据,一个标签分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其他标签描述其他数据,以此来实现数据关系的描述。起初,XML的发布是为了取代HTML,可那么多年过去,XML依然未能成功,于是现在XML常用作配制文件。
     xml分为文档声明,元素,属性,注释,CDATA区、特殊字符和处理指令。最简单文档声明,<?xml vorsion="1.0" ?>(不能出现全角空格) ,用encoding属性说明文档的字符编码,<?xml vorsion="1.0" enconding="GB2312" ?>( <?xml vorsion="1.0" enconding="UTF-8" ?>此时记事本存储时也用UTF-8,不会出现错误),用standalone属性说明文档是否独立, <?xml vorsion="1.0" enconding="GB2312" standalone="yes" ?>。
      1)元素,标签。含标签体,<a>...</a>,不含标签体,<a>...</a>,简写为<a/>。格式良好文档必须有且仅有一个根标签。xml标签中出现的空格或换行,xml解析程序都当作
         标签内容处理。命名可以包含字母、数字以及其他一些可见字符,但必须遵守:区分大小写、不能以数字或下划线开头、不能以xml(XML或Xml等)开头、不能含有空格、
         不能含有冒号。每个标签都可以有多个属性,每个属性都有它的名称和取值。
      2)CDATA区,有些内容不想被解析引擎解析,而当作原始内容处理,放置在CDATA区。<![CDATA[内容]]>。
      3)转义字符。&  &amp,<  &lt,>  &gt,"  &quot,'  &apos。
      4)用来指挥解析引擎如何解析xml文件。stylesheet。例如,应用css文件解析xml文档。
example1.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="1.css" ?>
<body>
   <a>
     <a1 id="a1">中国</a1>
     <a2 id="a2">俄国</a2>
   </a>
   <b>
     <b1 id="b1">美国</b1>
     <b2 id="b2">日本</b2>
   </b>
</body>


example1.css
@CHARSET "UTF-8";
a1{
	font-size:300px;
        color:red;
}
a2{
	font-size:200px;
        color:bule;
}
b1{
	font-size:100px;
        color:green;
}
b2{
	font-size:50px;
        color:black;
}


XML
    第二部分:XML约束。在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,称之为XML约束。通常使用的约束技术是XML DTD或者XML Schema。
XML DTD。
<?xml version="1.0" encoding="UTF-8"?>
 <!ELEMENT 书架 (书+)>
 <!ELEMENT 书 (书名,作者,售价)>
 <!ELEMENT 书名 (#PCDATA)>
 <!ELEMENT 作者 (#PCDATA)>
 <!ELEMENT 售价 (#PCDATA)>


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "3.dtd">
<书架> 
  <书> 
    <书名>java编程基础</书名>  
    <作者>张孝祥</作者>  
    <售价>39.00元</售价> 
  </书>  
</书架>

<!DOCTYPE 书架 SYSTEM "3.dtd">意思是声明此XML遵循的DTD文档。还有另一种写法,可以把约束写在XML文档顶部。如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 [<!ELEMENT 书架 (书+)>
               <!ELEMENT 书 (书名,作者,售价)>
               <!ELEMENT 书名 (#PCDATA)>
               <!ELEMENT 作者 (#PCDATA)>
               <!ELEMENT 售价 (#PCDATA)>]>
<书架>
      <书>
          <书名>java就业培训教程</书名>
          <作者>张孝祥</作者>
          <售价>39.00元</售价>
      </书>
      <书>
          <书名>java就业培训教程</书名>
          <作者>张孝祥</作者>
          <售价>39.00元</售价>
      </书>
</书架>

    元素类型可以是元素内容或类型。
         1)若为元素类型,则需要用()括起来。<!ELEMENT 书(书名,作者,售价)>
        2)若为元素类型,则直接书写,DTD规范定义了如下几种类型。
             EMPTY,用于定义空元素,例如<br/><hr/>。
             ANY,表示元素内容为任意类型。
     元素内容可以使用以下方式,描述内容组成关系
          1)用逗号分隔,表示内容出现顺序必须与声明时一致。
          2)用|分隔,表示任选其一,即多个只能出现一个。
      元素内容也可以使用+,?,*等符号表示出现次数。
          1)+:一次或多次出现。
          2)?:至多一次出现。
          3)*:零次或多次出现。
      可以使用圆括号批量设置。
      属性设置说明:
          1)#REQUIRED:必须设置该属性。
          2)#IMPLIED:可以设置也可以不设置。
          3)#FIXED:该属性取值为一个固定值。
          4)直接使用默认值。
      属性值类型:
          1)CDATA:普通文本字符串。
          2)ENUMERATED:枚举。
          3)ID:id。
          4)ENTITY:实体。

     schema定义和描述xml文档的看结构和内容的模式语言。
      1)schema符合xml语法结构。 后缀名.xsd,其根节点名称是Schema。
      2)schema支持比dtd更多的数据类型,并支持自定义数据类型。
           3)schema无实体,比dtd等复杂。
    4)可引入多个schema。
    编写一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URL地址上,在XML Schema技术中有一个专业术语描述此过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URL(名称空间)来告诉解析引擎,XML文档别写的元素来自哪里,被谁约束。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.javanet.cn" elementFormDefault="qualified">
	<xs:element name='书架'>
		 <xs:complexType>
		 	<xs:sequence maxOccurs='unbounded'>
		 		<xs:element name='书'>
		 		<!-- complexType放的元素为复杂类型 -->
		 			<xs:complexType>
		 			<!-- 顺序出现 -->
		 				<xs:sequence>
		 					<xs:element name='书名' type='xs:string'/>
		 					<xs:element name='作者' type='xs:string'/>
		 					<xs:element name='售价' type='xs:string'/>
		 				</xs:sequence>
		 			</xs:complexType>
		 		</xs:element>
		 	</xs:sequence>
		 </xs:complexType>
	</xs:element>
</xs:schema>

      其中,targetNamespace绑定名称空间,elementFormDefault="qualified"将所有元素绑定,若取值为unqualified只绑定根节点,使用javanet指向声明的名称,便于后面对名称空间的引用 ,complexType放的元素为复杂类型 ,sequence顺序出现。
<?xml version="1.0" encoding="UTF-8"?>
<javanet:书架 xmlns:javanet="http://www.javanet.cn" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://www.javanet.cn 1.xsd">
			<javanet:书>
		<javanet:书名>xxx</javanet:书名>
		<javanet:作者>xxx</javanet:作者>
		<javanet:售价>xxx</javanet:售价>
	</javanet:书>
</javanet:书架>

   声明书架来自 "http://www.javanet.cn"这个名称空间,受此名称空间绑定的Schema约束,而名称空间是虚的,必须通过要通过schemaLocation告诉来自哪个Schema文档.而schemaLocation的名称空间"http://www.w3.org/2001/XMLSchema-instance"这是个著名的名称空间,默认知道这个名称空间对应的Schema文档。  

  Schema声明语法:
    (1)定义简易元素:<xs: element name="xxx" type="yyy">,此处xxx指元素名称,yyy指元素类型。
         简易元素的默认值和固定值。
    <xs:element name="color" typr="string" default="red">,缺省值为red。
    <xs:element name="color" typr="string" fixed="red">,固定值为red。
    (2)属性:拥有属性的元素称为复合类型。<xs:attribute name="xxx" type="yyy">,同样拥有默认值和固定值。此外,默认属性是可选的,如需规定必选,则使用use。<xs:attribute name="xxx" type="yyy" use="required">
    (3)限定:
          a.对值得限定。
 <xs:element name="age">
              <xs:simpleType>
                  <xs:restriction base="xs:integer">
                           <xs:minInclusive value="0">
                           <xs:maxInclusivevalue="120">  
                  <xs:restriction>
              </xs:simpleType>
          </xs:element>

                 b.对一组值的限定。
  <xs:elsement name="car">
        <xs:simpleType>
            <xs:restriction base="xs:integer">
                 <xs:enumeration value="Audi">
                 <xs:enumeration value="BMV">
                 <xs:enumeration value="Golf">
             </xs:restriction>
        </xs:simpleType>
   </xs:element>
c...
     (3)复杂元素。<employee>
                    <firstname>xx</firstname>
                    <lastname>xx</lastname>
                  </employee>
         在Schema有两种方式声明复杂元素。
          a。通过命名此元素,可直接对“employee”元素进行声明。
         
。<xs:element name="employee">
               <xs:complexType>
                   <xs:sequence>
                      <xs:element name="firstname" type="xs:string">
                       <xs:element name="lastname" type="xs:string">
                    </xs:sequence>
               <xs:complexType>
            </element>

    b.“employee”元素可以直接使用type属性。
   
 <xs:element name="employee" type="personinfo"/>
               <xs:complexType name="personinfo">
                   <xs:sequence>
                      <xs:element name="firstname" type="xs:string">
                       <xs:element name="lastname" type="xs:string">
                    </xs:sequence>
               <xs:complexType>

你可能感兴趣的:(xml)