[翻译]Popfly系列课程7 –深入幕后:使用 Popfly学习XML的初学者指南

 

   

XML(可扩展标记语言)是一个为描述数据而设计的符号系统。XML已经成为一个通过Internet描述与传输数据的标准。

本课中你将通过查看Popfly块怎样使用XML来描述它们的输入,输出,与操作来认识XML。接着,你将研究来自RSS源的数据,查看其背后的XML,并创建一个mashup来显示它。最后,你将初步了解web服务,并研究Popfly块调用一个web服务时生成的XML

 

 

深入幕后:使用 Popfly学习XML的初学者指南

 

 

本课的Professor Popfly Mashups参考:

 

l  ProfPopflyRSSFeed (http://www.popfly.com/users/professorpopfly/ProfPopflyRSSFeed )

l  YahooTraffic XML (Block) (http://www.popfly.com/users/professorpopfly/YahooTrafficXML )

l  YahooTrafficXMLMashup (http://www.popfly.com/users/professorpopfly/YahooTrafficXMLMashup)

clip_image002

学习目标

 

完成本课学习后,你将可以:

l  描述XMLHTML之间的不同

l  识别XML文件的不同组成部分

l  阐述Popfly怎样使用XML来描述块

l  解释为什么XML适合数据交换

l  解释为什么CSV(逗号分隔)格式的文件在描述信息时存在缺陷

l  描述XMLRSS之间的关系

l  理解web服务向其他应用程序提供信息的方式

 

概览

 

         XML(可扩展标记语言)是一个为描述数据而设计的符号系统。由于XML关注数据含义的本身,许多提供软件服务的Web2.0公司通过internet提供XML格式表示的数据。XML已经成为一个通过Internet描述与传输数据的标准语言。

         本课中你将用3种不同的方式使用PopflyXML交互。首先,你将通过查看Popfly块怎样使用XML来描述它们的输入,输出,与操作来学习与认识XML。接着,你将研究来自RSS源的数据,查看其背后的XML,并创建一个mashup来显示它。最后,你将初步了解web服务,并研究Popfly块调用一个web服务时生成的XML

 

什么是XML

 

         一种简单的表示可以让应用程序处理的信息的方式是使用CSV格式的文本文件。例如,考虑下面这个不同大学的示例数据:

 

 

Bentley College, 623, 576

 

Boston College, 667, 650

 

Northeastern University, 615, 596

 

Cornell University,,

 

 

         虽然学院的名字是很明显的,但是如果没有标记那两个数字值的含义就不明确了。它们可以是今年入学的男学生与女学生数,或即将入学的大一新生的数学与关键阅读SAT的平均分数,或校园内学生花费在活动与技术上的费用。一种可能将这些数据的含义标识清楚的方式是将数据以XML格式表示:

<?xml version="1.0" encoding="utf-8" ?>

 

 

<collegeList>

 

    <college name= "Bentley College ">

 

        <satMath>623</satMath>

 

        <satReading>576</satReading>

 

    </college>

 

    <college name= "Boston College ">

 

        <name>Boston College</name>

 

        <satMath>667</satMath>

 

        <satReading>650</satReading>

 

    </college>

 

    <college name= "Northeastern University ">

 

        <satMath>615</satMath>

 

        <satReading>596</satReading>

 

    </college>

 

    <college name= "Cornell University " />

 

</collegeList>

         列表中的每一个项目都由一个开标签与一个闭标签来指示。在一个XML文档中标签标记一个单元信息的开始与结束。整个文档被包在一个唯一的元素(上面例子中为<collegeList>)内。关闭标签以/开头,后面跟着标签的名称,XML要求每个开标签都有一个对应的闭标签。每个标签被定义于一对尖括号<>中,并被称作元素(element)。

         XML的规则之一是每一个起始标签都需要一个相应的结束标签。在某些情况下,起始标签与结束标签间可能没有指定任何信息,所以可以使用下列速记符号:例如:康奈尔大学没有可用的SAT成绩,这时<college name=”Cornell University”></college>这个标签可以简写为 <college name=”Cornell University” />。遵守这条以及其它规则的文档被称作格式良好(well-formed)的文档。

         一些元素,如<collegeList><college>包含了其它元素,这使XML成为一种结构化的标记语言。<college>元素又有一个name属性来给其本身增加附加信息。

         注意,以XML来表示的信息没有与网页相关的。HTML(超文本标记语言)定义了用于格式化与显示数据的标签,而不包含关于数据意义本身的信息。一种基于HTML的新标准被称作XHTML(可扩展超文本标记语言),其出于获得格式良好文档的愿望,将XML格式的规则应用到HTML上。

 

示例1:查看一个Popfly块的内部

 

         这个例子描述了怎样查看一个Popfly块的内部基础 – XMLPopfly块使用XML来确定与一个Popfly块相关的输入,操作与对象。

         打开Popfly,并创建一个新的块。有左侧区域选择任何可用的块。点击一个块将在Popfly的代码区域加载其描述与代码。PhotoStack块有一个称为addImage的操作,其接受两个输入:imageUrl与图片的标题。

         如下是描述PhotoStack规格定义的XML

clip_image004

         如下是你在mashup编辑器中打开PhotoStack块时看到的样子:

clip_image006

         注意块描述部分的XML代码与Popfly Mashup编辑器解释并显示的Popfly块的XML格式的定义是相一致的。块描述中给出的每个操作,输入,默认值,与描述都作为块规范的一部分出现。

 

示例2:查看一个RSS源的内部

RSS(简单聚合)源使用XML来发布更新频繁的web内容。通过向聚合程序提供RSS源的URL,聚合软件将会周期性的检查源中是否有更新,并显示新项目。这个过程由许多不同的网站收集数据。

网站中通常用这个clip_image008图标来表示一个RSS源。你可以点击你项目页面中的Popfly Mashup编辑器中的RSS图标来查看RSS源,然后可以产看那个页面的源文件以查看源本身的XML。这个URL如下URLProfessor Popfly这个Popfly项目的源:http://www.popfly.com/users/professorpopfly/projects.rss。你的Popfly项目的源的URL类似,只需将professorpopfly替换为你的Popfly用户名即可。

clip_image010

         每次你保存一个Popfly mashup时,Popflymashup及其相关的信息存储于数据库中。当你请求你的Popfly mashupRSS源时,这个请求在Popfly服务器上运行一个程序来查询其数据库并在运行中生成一个RSS源文件。查询数据库中指定的信息并返回那个信息XML格式的数据来作为程序的输出结果这种生成XML的方式很常见。

         Popfly项目的RSSXML的一部分如下:

<?xml version="1.0" encoding="utf-8"?>

 

<rss version="2.0">

 

    <channel>

 

        <title>professorpopfly's Popfly Feed</title>

 

        <link>http://www.popfly.com/users/professorpopfly</link>

 

        <description>

 

            Popfly projects shared by professorpopfly.

 

        </description>

 

        <lastBuildDate>Tue, 27 May 2008 03:16:26 GMT</lastBuildDate>

 

        <item>

 

            <title>USGSEarthquakes</title>

 

            <link>

 

                http://www.popfly.com/users/professorpopfly/USGSEarthquakes.details

 

            </link>

 

            <description>

 

                Mashup of earthquake data from US Geological Survey. &amp;#40;earthquake.usgs.gov&amp;#41;.  This one includes little maps in the description, so it&amp;#39;s prettier than my other Earthquake mashup.

 

            </description>

 

            <pubDate>Tue, 27 May 2008 03:16:26 GMT</pubDate>

 

        </item>

 

        <item>

 

            <title>FlickrPhotoSphere</title>

 

            <link>                http://www.popfly.com/users/professorpopfly/FlickrPhotoSphere.details

 

            </link>

 

            <description>Display photos on a sphere.</description>

 

            <pubDate>Mon, 26 May 2008 05:43:30 GMT</pubDate>

 

        </item>

 

       

 

    </channel>

 

</rss>

         注意,每个RSS源,无论其实描述Popfly mashup,博客文章,或是你发布在flickr上的近期照片,都(至少)包含<rss>, <channel>, <item>, <title>, <link>,  <description><pubDate>这几个标签。这些是最常见的;RSS规范也允许一些其它的标签来标记内容中相应的信息。出于这点,合并并处理RSS源是非常简单的,就如我们将在RSS课中看到的那样。PopflyRSS块由RSS源中返回这些与其它的那些值。要查看这些值,将RSS块连接到Popfly中另一个块,并指定RSS块作为后者的输入值。

         在这个例子中我们创建了一个简单的mashup来显示RSS源。这个mashup使用RSS块由指定的RSS源获取项目,使用RSSList来将项目显示在一个交互的动态的界面中。使用RSS块的getItems操作,输入你的Popfly mashup的(或者另一个)RSS源的URL,并将其连接到一个RSSList块来创建一个有趣的显示RSS的列表。如果你喜欢可以自定义RSSList的颜色。

clip_image012

         在预览这个mashup之前,通过点击其扳手图标来查看RSSList块的内部。注意下拉列表中的项目完全就是那些RSS源输出的项目。Popfly基于字段名称与数据类型将一个块的输出与另一个的输入尽可能的匹配。

clip_image014

 

示例3:深入查看Yahoo Traffic与其它Web Services

 

         在被命名为Mashups, Interoperability and eInnovation的白皮书(http://cyber.law.harvard.edu/interop/pdfs/interop-mashups.pdf)中,位于马萨诸塞州剑桥的哈佛大学的伯克曼中心互联网与社会部门的John PalfreyUrs Gasser教授描述了web服务正在怎样改变人们使用互联网的方式:

 

Web越来越多不再仅作为一个信息的门户,而是同时提供应用程序到应用程序的通信。Web服务是将不同应用彼此相连的接口,或者任何一种可以通过网络实现机器到机器的交互的技术的代名词”

 

许多Popfly块访问web服务以便获取它们的信息。一个Web服务是一个应用程序(如你的Popfly mashup)可以调用的位于互联网上任意其它位置远程计算机上的方法或操作。Web服务向调用它的应用程序提供XML格式的输出。Web服务为应用程序或组织彼此通过互联网分享数据提供了一个框架。

         在这个例子中,你将看到怎样检查一个Web服务返回的XML格式的数据。这个例子在Popfly中使用了Yahoo Traffic块。Yahoo Traffic是一个由Yahoohttp://developer.yahoo.com/traffic/)提供的Web服务。我们即将构建的Popfly mashup(运行于微软web服务器)将调用提供交通数据的Yahoo服务(运行于yahoo.com的服务器上)。

         打开Popfly并新建一个块。拖动Yahoo Traffic块到设计区域,注意这个块的描述将会显示。点击Block Code标签页。

 

clip_image016

         查找一行包含”environment.getXml(…)”JavaScript代码。这条语句是Popfly用来调用Web服务获取真实XML数据的。要显示返回的XML,你需要在那行包含调用(enviroment.getXml(…))的语句的下方添加一行JavaScript代码来在弹出对话框中显示原始的XML

                                               alert(returnResponse.xml);

         在这个块中,returnResponse是包含XML响应的变量的名称。注意其它块可能在”=”前使用不用的命名的变量。确保正确的拼写变量的名称,确保大小写与你正在拷贝的源代码中的格式完全一致。

clip_image018

         点击保存并运行。给你的块起一个名字。(ProfessorPopfly将其命名为YahooTrafficXML)。一个新的包含你的新块的Popfly Mashup编辑器将出现在一个新的浏览器窗口中。点击预览来将这个块作为一个mashup运行。一个警告窗将弹出来,其中你可以看到来自web服务的数据的XML。如果在弹出窗中没有看到XML代码,这可能说明你没有正确的拼写alert语句。

         注意:IE7在警告窗中将只显示XML的一部分。Firefox将打开一个更大的警告窗来展示所有的XML

 

clip_image020

         但你查看过XML后,点击警告窗的OK按钮。当mashup完成后,在你的浏览器中查看其输出。观察警告窗中展示的XML数据与展示在浏览器中的mashup的输出有何不同?

 

clip_image022

 

 

posted @ 2009-11-30 13:15  hystar  阅读(369)  评论(0编辑  收藏  举报