XML语法

XML可以用来写配置 , 这个很简单 . 也可以用来存储数据 . 如果你是一个程序员 , 写一个DTD / SCHEMA, 用来规范XML文件 , 那么你完全可以把这个XML交给策划人员去配置 , 这好像是架构师干的事啊 , 不管怎样这也可以规范你的XML配置写法.起到事半功倍的效果.

目前的文本编辑器有很多 :  EverNote , Notepad++ , UltraEdit 等 , 用它们来编写一些简单的配置是可以的 , 但是作为企业级用的XML文件 , 还是用XMLSPY比较好. XMLSPY下载地址 : http://www.altova.com/simpledownload1.html  . 目前最新版是 2015版的 . 好了废话不多说 , 正题来了 j_0057.gif , 我用的2011版

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books[
	<!ELEMENT books (bookCell+)>
	<!ELEMENT bookCell (btitle,author,part+)>
	<!ELEMENT btitle EMPTY>
	<!ELEMENT author EMPTY>
	<!ELEMENT part (title , chapter)>
	<!ELEMENT title (#PCDATA)>
	<!ELEMENT chapter (ctitle , sect1)>
	<!ELEMENT ctitle (#PCDATA)>
	<!ELEMENT sect1 (stitle , para)>
	<!ELEMENT stitle (#PCDATA)>
	<!ELEMENT para (#PCDATA)>
	
	
	<!ATTLIST btitle 
		name ID #REQUIRED
	>
	<!ATTLIST author 
		name CDATA #REQUIRED
		gender (男|女) #IMPLIED
		email CDATA #IMPLIED
		from CDATA #FIXED "CHINA"
	>
	<!ENTITY authorName "Aonaufly">
]>
<books>
	<bookCell>
		<btitle name = "XML指南"/>
		<author name = "&authorName;"  gender = "男" email = "[email protected]" from = "CHINA"/>
		<part>
			<title>Part Title</title>
			<chapter>
				<ctitle>Chapter Title</ctitle>
				<sect1>
					<stitle><![CDATA[Section1 Title]]></stitle>
					<para>Text</para>
				</sect1>
			</chapter>
		</part>
	</bookCell>
</books>

解释 :  这是一个内置XML . <!ELEMENT  A 是对元素进行限制 , 其中 (B +/*/?/ ) 分别表示元素A中有B元素 1个或多个/0个或多个/0个或1个/ 1个 .  EMPTY表示没内容(可以有属性)如<B s= "x"/> , 而 (#PCDATD) 表示B的内容是数据无需解析相当于<![CDATA[ ---- ]]> ;  <!ATTLIST  A 对属性A进行规范控制,ID B表示 B是具有唯一性的 , #REQUIRED 表示必须要有值 , #IMPLIED 表示这个属性可以被忽略不写 , #FIXED 表示固定值 ; <!ENTITY A B > 就相当于 const  *  A = B 可以在XML中用 "&A;" 来替代的 .


关于外部DTD文件: 

引入 <!DOCTYPE books SYSTEM "x.dtd">


混合DTD <!DOCTYPE books SYSTEM "x.dtd"   [

    <!-- 内部DTD文件在此编写 -->

]>


schema , 是MicroSoft的 , 用来取代DTD , 他比DTD的优势大 , 但是没有被 W3C认证


<?xml version="1.0" encoding="UTF-8"?>
<loads xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///F:/XC/xs.xsd">
	<address service="172.0.0.1" point="80"/>
	<versionx>2.1.1</versionx>
	<res priority="1">
		<content name="main.swf" type="byte" url="s/q/"/>
		<content name="lan.txt" type="txt" url="s/l"/>
	</res>
</loads>


接下来 , 是Schema 文件 xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:simpleType name="typeEnum">
		<xs:restriction base="xs:string">
			<xs:enumeration value="byte"/>
			<xs:enumeration value="txt"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:attributeGroup name="addressGrop">
		<xs:attribute name="service" type="xs:string"/>
		<xs:attribute name="point" type="xs:int"/>
	</xs:attributeGroup>
	<xs:complexType name="resComplex">
		<xs:sequence>
			<xs:element name="content">
				<xs:complexType>
					<xs:attribute name="name" type="xs:string" use="required"/>
					<xs:attribute name="type" type="typeEnum"/>
					<xs:attribute name="url" type="xs:string"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="priority" type="xs:string"/>
	</xs:complexType>
	<xs:element name="loads">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="address">
					<xs:complexType>
						<xs:attributeGroup ref="addressGrop"/>
					</xs:complexType>
				</xs:element>
				<xs:element name="versionx" type="xs:string"/>
				<xs:element name="res" type="resComplex" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

下回分解 ...

<xs:element name = "A"  加入元素A  <A />  或 <A></A>

<xs:attribute name = "B" type= "xs:string"加入属性B   <A B= "c" /> 类型为string

<xs:complexType 加入复杂类型 , 用于 <xs:element 后

<xs:sequence 加入序列放在xs:complexType后面


关于扩展基本属性 看TypeEnum

扩展属性组 看addressGroup


注意基本属性的扩展  和 其他扩展在XML中的用法是不一样的


当然还有 Group 

element 也可以扩展

你可能感兴趣的:(xml,规范)