首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

XML要点

最近做基于FPGA的金融硬件加速的项目,所用到的上海证券交易所提供的数据都是用XML格式保存的。所以学了一些XML的相关知识。总结一下。
学习网站:
http://www.w3school.com.cn/xml/index.asp
http://xml.jz123.cn/default.asp.htm
XML
  • XML是EXtensible Markup Language的缩写
  • 首先要明确的是:XML是被设计用来存储数据、携带数据和交换数据的,他不是为了显示数据而设计的。
  • 对于XML最好的形容可能是: XML是一种跨平台的,与软、硬件无关的,处理信息的工具。


  • XML是被设计用来描述数据的,重点是:什么是数据,如何存放数据。
  • XML标记并不是预先规定好的,你必须创造你自己的标记。
  • 使用XML, 可以在网络中交换金融信息。



XML 仅仅是纯文本
通过 XML 您可以发明自己的标签
XML 是独立于软件和硬件的信息传输工具。
  • XML标记是大小写敏感的。
  • 所有的XML文档必须有一个根元素XML文档中的第一个元素就是根元素。
  • XML中的注释<!-- 这是一个注释 -->
数据既可以存储在子元素中也可以存储在属性中。我的经验是属性在HTML中可能相当便利,但在XML中,你最好避免使用。尽量使用元素来描述数据,仅使用属性来描述那些与数据关系不大的额外信息。
在 XML 中,有 5 个预定义的实体引用:
&lt;<小于
&gt;>大于
&amp;&和号
&apos;'单引号
&quot;"引号





XML 元素是可扩展的
////////////////////////////////////////////////////////////////////////////////////////////
DTD
///////////////////////////////////////////////////////////////////////////////////////////
拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。


假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:
<!DOCTYPE 根元素 [元素声明]>
元素声明使用下面的语法:<!ELEMENT 元素名称 类别>
或者<!ELEMENT 元素名称 (元素内容)>
<?xml version="1.0"?>
<!--  Copyright w3school.com.cn -->  //注释
<!DOCTYPE note [

<!ELEMENT note  
(to,from,heading,body)>

<!ELEMENT to  

(#PCDATA)>

<!ELEMENT from  
(#PCDATA)>

<!ELEMENT heading (#PCDATA)>

<!ELEMENT body  
(#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>


以上 DTD 解释如下:!DOCTYPE note
(第二行)定义此文档是
note
类型的文档。
!ELEMENT note
(第三行)定义
note
元素有四个元素:"to、from、heading,、body"
!ELEMENT to
(第四行)定义
to
元素为 "#PCDATA" 类型
!ELEMENT from
(第五行)定义
frome
元素为 "#PCDATA" 类型
!ELEMENT heading
(第六行)定义
heading
元素为 "#PCDATA" 类型
!ELEMENT body
(第七行)定义
body
元素为 "#PCDATA" 类型
外部文档声明
假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:
<!DOCTYPE 根元素 SYSTEM "文件名">
<?xml version="1.0"?><!DOCTYPE note SYSTEM "note.dtd"><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>


//////////////////////////////////////////////////////////////////////////////////////XML Schema/////////////////////////////////////////////////////////////////////////////////////XML Schema 是基于 XML 的 DTD 替代者。XML Schema 描述 XML 文档的结构。

XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
与 DTD 不同,XML Schema 拥有对数据类型和命名空间的支持。




代码解释:下面的片断:
xmlns:xs="http://www.w3.org/2001/XMLSchema"显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs:
这个片断:
targetNamespace="http://www.w3school.com.cn"显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。
这个片断:
xmlns="http://www.w3school.com.cn"指出默认的命名空间是 "http://www.w3school.com.cn"。
这个片断:
elementFormDefault="qualified"指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。


代码解释:下面的片断:
xmlns="http://www.w3school.com.cn"规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间。
一旦您拥有了可用的 XML Schema 实例命名空间:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"您就可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:
xsi:schemaLocation="http://www.w3school.com.cn note.xsd"
简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。

定义简易元素的语法:<xs:element name="xxx" type="yyy"/>此处 xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型。
最常用的类型是:
  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time   

什么是属性?简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。


如何声明属性?定义属性的语法是:<xs:attribute name="xxx" type="yyy"/>在此处,xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。
最常用的类型是:
  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time
实例这是带有属性的 XML 元素:
<lastname lang="EN">Smith</lastname>这是对应的属性定义:
<xs:attribute
name="lang" type="xs:string"/>可选的和必需的属性
在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性:<xs:attribute name="lang" type="xs:string" use="required"/>



通过指示器,我们可以控制在文档中使用元素的方式。

指示器有七种指示器:
Order 指示器:
  • All
  • Choice
  • Sequence
Occurrence 指示器:
  • maxOccurs
  • minOccurs
Group 指示器:
  • Group name
  • attributeGroup nameOrder 指示器Order 指示器用于定义元素的顺序。
    All 指示器<all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次:
  • Choice 指示器<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼):
  • Sequence 指示器

    <sequence> 规定子元素必须按照特定的顺序出现:  








    Occurrence 指示器

    Occurrence 指示器用于定义某个元素出现的频率。


    minOccurs 指示器

    <minOccurs> 指示器可规定某个元素能够出现的最小次数:




    Group 指示器

    Group 指示器用于定义相关的数批元素。主要有以下两点:


    元素组
    属性组

    <any> 元素使我们有能力通过未被 schema 规定的元素来拓展 XML 文档!


    下面这个例子是从名为 "family.xsd" 的 XML schema 中引用的片段。





    下面这个例子是从名为"children.xsd": 的 XML schema 中引用的片段。




    /////////////////////////////////////////////////////////////////////////////////////////////DOM


    /////////////////////////////////////////////////////////////////////////////////////////////


    XML DOM 是 XML Document Object Model 的缩写,即 XML 文档对象模型。


    XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法(接口)


    换句话说:


    XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。


    根据 DOM,XML 文档中的每个成分都是一个节点


    XML DOM 节点树

    XML DOM 把 XML 文档视为一种树结构。这种树结构被称为节点树


    可通过这棵树访问所有节点。可以修改或删除它们的内容,也可以创建新的元素。


    因为 XML 数据是按照树的形式进行构造的,所以可以在不了解树的确切结构且不了解其中包含的数据类型的情况下,对其进行遍历。


    您将在本教程稍后的章节学习更多有关遍历节点树的知识。


    父节点:Parent Node,子节点:Children Node,同级节点:Sibling Node。



    以上就是一些XML最必须掌握的一些东西



    /////////////////////////////////////////////////////////////////////////////////////////


    RELAX NG


    ///////////////////////////////////////////////////////////////////////////////////////


    我做的项目里面金融协议都是用这种语言定义的


    This document uses the compact syntax of the RELAX NG schema language [RNC] to formally define the XML structure for template definitions.


    http://www.ibm.com/developerworks/cn/xml/x-matters/part25/


    http://www.ibm.com/developerworks/cn/education/xml/x-relaxng/index.html


    RELAX NG 几乎在各方面都完全优于 W3C XML Schema 或 DTD!


    RELAX-NG (读音是“relaxing”)也是一种XML schema定义语言,它的主要特征是比目前通用的基于DTD或是XSD的语言要简洁优雅的多。W3C XML Schemas已经因为“卓越”的复杂性而臭名昭著了,许多XML大师都对此表示过不满,Tim Bray评论说:


    W3C XML Schemas (XSD) 烂透了。又难读,又难写,还不容易理解,交互性也成问题,而且你想用XML来做的很多事情都没法描述出来。

    Griffin Brown最近列出了使用RELAX-NG,而不是W3C XML Schema来进行XML建模的10条原因,把网络上散落的对RELAX-NG的赞誉做了归纳。如下所示:


    • “好的规格说明就意味着好的交互性”。
    • “提供了简洁的语法”(RELAX-NG支持使用DSL来精确的描述约束条件,而不是使用尖括号)。
    • “它的规范是一个稳定的ISO标准”。
    • “没有PSVI”(PSVI 被认为是有害的)
    • “没有给内容提供默认值”。
    • “更好的数据类型支持”。
    • “更加完善的模型”
    • “更加完善的语法校验”
    • “文档实例没有依赖性”。
    • 正在获得越来越广泛的应用”。
返回列表