触摸艺术和时尚的音弦 ---- happydog's art secret garden ~~~

XML笔记一

上一篇 / 下一篇  2008-04-21 18:30:41

XML是描述和结构化数据的技术。

二进制文件的好处是快,但是不同的软件用不同的格式(就是描述信息的信息,meta. data)。 

文本文件, 8bit合在一起做为一个unit来表示一个字符。 好处是易读,不好处是加入meta. data很难。 比如doc存成txt,会失去很多格式。

Markup language  就是自我描述的text , 从SGML开始,后来有了HTML。XML也是SGML的子集

XML其实不是一种真正意义上的语言,而是创造你自己语言的一种规则和标准。
<name>
 <first>  John </first>
 <last> Doe </last>
</name>

XML可以用style. sheet 语言来规范显示,比如XSLT或者CSS, 原始XML在IE中可以显示。

为什么要用XML?
 数据多样性使得自己制定规则很复杂,或者常常是写程序的时候限制数据, 而XML则可以很灵活处理任何数据。
比如这个人要加一个middle name
<name>
 <first>  John </first>
 <middle> Fitzgerald Johansen </middle>
 <last> Doe </last>
</name>

XML Parser是指解开XML语法,得到数据的程序。

XML也是group info in hierarchies. 好像JS的DOM一样。

XML的应用
Website Content, Distributed Computing, e-Commerce

XML基础
tree structure, tags, element, attribute
XML rule: tag必须成双,不能overlap, element必须嵌套nested,一个XML文档只有一个根,case sensitive, XML naming conventions. 在PCDATA上保持whitespace而不stripping(html会strip)
XML 注释 <!--   -->
empty elment like this:  <middle />
XML Declaration:  version, encoding, standalone(yes: 只靠自己存在,no: 也依靠外部DTD)
XML Pi: Processing Instructions   <?  ?>
escaping Characters:  &amp;   &
                      &lt;   <
                      &gt;   >
                      &apos;  '
                      &quot;   "

XML Namespaces 是一个vocabulary,或者说a group of names。 因为不同的作者可能用一样的词表示不一样的意思。
而用来标识Namespaces的URL只是一个名字,并不是真正的location.
做为一个属性出现  xmlns: pers="http://www.wiley.com/pers"
                  xmlns: html="http://www.w3.org/1999/xhtml"

而 pers做为 前缀出现在XML中。  而也可以定义一个默认的Namespace, 而不带前缀的tag都表示在它之内。
而Namespace定义也不一定要在root上面,还可以在任何地方,甚至可以给某个tag定义他自己以及他下面的Descendants的不同于整个XML默认Namespace的Namespace
比如
<person xmlns="http://www.wiley.com/pers">
 <!-- 默认的Namespace -->
 <name />
 <!-- 没有前缀,表示默认Namespace -->
 <p xmlns="http://www.w3.org/1999/xhtml"> This is XHMTL</p>
 <!-- p和它所有子结点的默认Namespace换了,这里p也没有用前缀  -->
</person>
Namespaces & attributes   attribute并不跟谁element处在同一namespace中,而是在整个xml的默认的namespace中,除非你用前缀显式定义它在某个namespace里面。

DTD  Document Type Definitions
是用parsers来验证XML是否符合某种Vocabulary的规则。
<?xml version="1.0" ?>
<!DOCTYPE name [
   <!ELEMENT name (first, middle, last)>
   <!ELEMENT first (#PCDATA)>
   <!ELEMENT middle (#PCDATA)>
   <!ELEMENT last (#PCDATA)>
]>
<name>
 <first>  John </first>
 <middle> Fitzgerald Johansen </middle>
 <last> Doe </last>
</name>

DTD的定义是有点像SGML的,也一定要放在开头。
SYSTEM 和 PUBLIC 标识
<!DOCTYPE name SYSTEM "http://wiley.com/hr/name.dtd" []> 
<!DOCTYPE name SYSTEM "file:///c:/name.dtd" []>
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Name Example//EN">
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Name Example//EN" "name.dtd">
对于不同的工业科技领域,有一些公认共享的DTD,可以引用。比如化学的 CML DTD
DTD通常是三个部分 Elment 声明      sequence   or choice
                  Attribute声明    属性类型
                  Entity 声明     Built-in, Character, General, Parameter
<!ELEMENT contacts (contact*)>
<!ATTLIST contacts source CDATA #IMPLIED>
DTD比XSD的优势  有Entity 声明, 是直接嵌入在XML Recommendation里面的

XML Schemas(XSD)
也是用来描述XML文档结构的。
XSD比DTD的优势  和XML一致的语法,提供Namespace support(DTD只能通过属性定义),很好的Data Types, Object继承和Content模型继承。

name.xml
<?xml version="1.0" ?>
<name xmlns="http://www.example.com/name"
<!-- 默认namespace , 和xsd里面 targeNamespace一致 -->
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.example.com/name name.xsd"
<!-- XMLschema和location 对 -->
      title="Mr.">
 <first>  John </first>
 <middle> Fitzgerald Johansen </middle>
 <last> Doe </last>
</name>

xsd存在外部的.xsd文件中
name.xsd
<?xml version="1.0" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.example.com/name"
targetNamespace="http://www.example.com/name" elementFormDefault="qualified">
 <element name="name">
<!-- 是Global Type -->
  <complexType>
   <sequence>
    <element name="first" type="String"/>
    <element name="middle" type="String"/>
    <element name="last" type="String"/>
<!-- 类型是字符串,也是Local Type -->
   </sequence>
<!-- 这里是一个sequence,序列 -->
   <attribute name="title" type="String"/>
  </complexType>
 </element>
</schema>

Global Type是定义在schema直接的子结点上的, 而其他的地方定义的都是Local Type
complexType and simpleType
<group>
Content Models
<sequence>
<choice>
<group>
<all>
 minOccurs, maxOccurs


TAG:

 

評分:0

我來說兩句

顯示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar