Data ,XML,and XPath
出自OpenFace
第二十五章. 数据,XML和XPath
第五部分. 数据绑定
术语data是指,能被Laszlo应用程序所显示和操纵的格式的数字,字符或文本。在Laszlo应用程序中采用的特殊格式是XML文档(或块)或Javascript 对象。到目前为止,我们已经本章简要介绍了XML和相关的XPath语法。 JavaScript中的对象描述在第2章Language Preliminaries,也有介绍。
目录 |
LZX中的数据
LZX被设计成能很容易的操纵数据以及提供给用户界面的数据绑定(tie)。特别的,LZX提供:
直接把数据嵌入应用程序;
运行时,对远程数据源接收或发送数据;
对web服务接收或发送数据;
运行时创建或修改数据;
显式的绑定数据到用户界面。
目前为止,已经简单的介绍在OpenLaszlo应用中数据绑定和操纵,你可以此为开始:
什么是XML
碰巧是,如果你阅读本文档时,你已经知道了一些关于XML的信息。简单地说,XML是一种来描述数据结构的标记语言。XML的语法非常简单。这使很多系统可以识别象XML那样内部操作的编码数据(LZX本身实际上是一个XML应用[见第二章 语言初步])。
如果你不知道在XML中关键词,元素和属性的意思,你或许应该读一下以下推荐的书。
W3 Schools: XML 入门 XML.com: XML技术入门
一般来说,XML文档是一个树形结构,每个结点称为一个属性。以下是一个简单的XML文档。
Example 25.1. 一个XML文件的例子
<?xml version="1.0" encoding="ISO-8859-1"?> <bookshelf> <book binding="paperback"> <title>Acts of the Apostles</title> <author>John F.X. Sundman</author> <publisher>Rosalita Associates</publisher> <price>15.00</price> <year>1999</year> <category>thriller</category> <rating>4.5</rating> </book> <book binding="casebound"> <title>Shock</title> <author>Robin Cook</author> <publisher>Putnam</publisher> <price>24.95</price> <year>2001</year> <category>thriller</category> <rating>3.5</rating> </book> <book binding="paperback"> <title>Cheap Complex Devices</title> <editor>John Compton Sundman</editor> <publisher>Rosalita Associates</publisher> <price>11.00</price> <year>2002</year> <category>metafiction</category> <rating>5.0</rating> </book> </bookshelf>
所有的XML文档必须有一个根元素,如文档根元素:<bookshelf>。根元素中有三个名称为<book>的子元素。每个子元素中有一个名称为"binding"的属性。在每个<book>有多个其它元素。通常XML文档可以有N层机构,并且它的元素和属性也是不确定的。
如果对它的细节感兴趣,可以在W3C web站点上查找相关的XML特性。Laszlo支持所有的XML1.0的特性,但以下情况除外:
命名空间支持有限。对XML文件解析时,命名空间被剥夺。
对字符集的支持有限。 (在XML文件中不管设置任何字符集,只支持微软Windows cp1252字符集中8位字符集)。
不支持外部实体声明
对数据的大小,也有一些限制。元素的属性加上名字的长度和内容的长度最大为64kb。
空白间隔
XML作为一种明确的数据交换格式,在处理空白间隔(间隔,制表符,换行,和carriage)上存在一些问题,因为不同的应用程序对空白间隔的处理是不同的。在OpenLaszlo应用程序中,代理模式和SOLO模式处理空白的方式不同,所以问题也复杂起来。
OpenFace应用程序中,运行时不会整理空白。如果文本节点全部是空白,它会移除该节点。比如:
<foo> </bar> </foo>
<bar>标签前和后,本应该有两个空白的文本节点。
这时因为程序不会预计得到所有的空白节点,而且SOLO应用程序中的客户端XML解析器不能年处理不能确认的数据。但是,这并不意味着你不能有全空白文本内容。
下面的教程比较巧妙的处理了空白,如果你的数据没有得到预期结果(特别是用代理模式和SOLO模式部署相同的程序,而结果不同。),你就应该对它特别注意了。
XPath
LZX数据存取和绑定很大程度应用了用来标示XML文档特定部位的W3C XPath标准。XPath规则是基于路径符号,即名称的。XPath包括一些操纵数据的表达式和函数库。例如,name()函数返回节点的名称,text()函数返回文本内容。
因为XML文件有一个树型结构,XPath是确定树结点的一套基本规则.XPath是建立在path符号上,因此得名.XPath包含了如何对数据了表达和库函数.举例来说,name()函数返回一个节点的名字,text()函数返回文本的内容.因此XPath作为一种模式匹配的语言,特别适合用来匹配模式在XML文件
XPath符号和现代操作系统中用来标识文件的符号类似。路径可以使相对的,也可以是绝对的。绝对路径从最顶端的节点,叫根节点开始,首先是斜线“/”符。使用家系的语言是为了便于描述节点和他的临近节点间的关系。比如,一个节点可以有父亲,祖父,孩子,孙子和兄弟。
斜线 / 用来把父亲和孩子分开。XPath表达式 /bookshelf/book 选择了所有的book元素。XPath表达式 /bookshelf/book/title则选择了所有的 title,如此等等。
方括号用来更进一步标示元素。比如,XPath表达式 /bookshelf/book[1] 表示选择元素book的第一个子元素。
字符用来速记XML属性的引用。因此,/bookshelf/book[@price] 表示选择具有price属性的所有book。
XPath表达式/bookshelf/book[@binding=’paperback’] 表示具有属性 paperback的所有books节点。
XPath表达式,/bookshelf/book[@price]/@price 表示选择具有price 属性的所有书的 prices。
在使用XPath时很少也很简单,说明也很简单,不过,通过使用xpath的功能,可以对XML的结点进行精确的查找。
语法/模式匹配的语言在程序中得到了有力的证明.例如,在XSLT中可以这样写,可以参考http://www.w3.org/tr/xpath网上的XPath的特性。
见26章 数据存取与绑定,对在LZX中进行数据绑定与操作进行了更深入的解释。
所支持的XPath功能
Path是一个开放的标准,LZX支持很大一部分,但不是所有。
下面的表格显示了在OpenLsazlo3.1中支持的XPath功能。
例子 Meaning n this case
myData:/myXML[1]/person[1] 第一个”person”节点 Homer
myData:/myXML[1]/person 所有的”person” Homer,Marge,
myData:/myXML[1]/person[2-3] ”person”节点2到3所包含的 Marge,Montgomery
myData:/myXML[1]/person[2-] ”person”节点2到最末节点 Marge,Montgomery
myData:/myXML[1]/person[-2] 到”person”节点2,并包括节点2 Marge,Montgomery
myData:/myXML[1]/person[@show] 含有”show”属性的所有”person”节点 Homer,Marge,Montgomery
myData:/myXML[1]/person[@show = 'simpsons'] 含有”show”属值为”simposons”的所有”person”节点 Homer,Marge,Montgomery
myData:/myXML/*/firstname 在”myXML”节点下面的所有”firstname”节点 Homer,Marge,Montgomery
Attributes and Functions(特性和函数) myData:/myXML[1]/person[1]/@show 第一个”person”节点的”show”属性 simpsons
myData:/myXML[1]/person[1]/lastname/text() 第一个”person”节点的”lastname”节点的文本 Simpson
myData:/myXML[1]/person[1]/last() “person”节点个数 3
myData:/myXML[1]/person[1]/position() 当用来复制视图时,这表示数据集中视图的位置 n/a
更多XPath文档
XPath是一些网络浏览器中转化一个XML文件到另一个XML文件的常用的XSLT语言。标准的XSLT文件通常包含了XPath文档描述,你也可以从网上查找有用的文档:

