Data ,XML,and XPath

出自OpenFace

跳转到: 导航, 搜索

Prev                                                                            Next

                           第二十五章. 数据,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文档描述,你也可以从网上查找有用的文档:


                                         Home 

Prev                                                                            Next