关于资源Autodesk发布过一个官方文档,我们也曾经在论坛上发布过。由于是英文版,为国内MapGuide开发者阅读方便,我在这儿翻译一下,并加入我的个人理解。
MapGuide有一套强大的API来操纵资源,比如要素源、地图、图层和网页布局。 使用资源服务API,基于MapGuide的应用程序可以执行想创建动态专题图、数据过滤、创建图层和提供更好用户体验等工作。
什么是资源,了解资源和资源服务有什么用?
提到资源服务(Resource service),首先我们需要介绍一下什么是资源(Resource)。MapGuide中的资源其实就是用xml文档表示的要素源(Feature Source),绘图源(Drawing Source)、图层、地图以及MapGuide浏览器的用户界面,即WebLayout等等。正确理解资源的概念是我们日后进行基于MapGuide资源服务编程的关键。我们这里主要讲述如何在MapGuide应用程序中操纵资源,从而使得你能够动态增加图层、改变图层的过滤条件或者图层样式、或者定制地图或者WebLayout等等工作。
什么是资源和资源数据库?
MapGuide把Layer Definition、Map Definition、DataSource Connection、Symbol Definition和WebLayout等等都作为XML的方式保存在资源数据库中。资源在资源数据库中的组织方式有点像文件系统,也是分目录分级组织存放的。存放的每一个资源都有两个基本部分组成—Resources Header和Resource Content。资源内容(Resource Content)就是上面提到的XML本身了,而资源头(Resource Header)是对资源内容的描述信息,它也是一个xml文件,描述的资源的访问权限等信息。除了资源头、资源内容外,还有一个概念就是资源数据(Resource Data)。资源数据是包含真正数据的部分,他可能是文件也可能是字符串,或者是字节流。文件的情况最好理解,也就常见,比如说我的SDF文件、SHP文件等等,他们就可能是作为Feature source这个资源的资源数据;资源数据是字符串的情况一般就是只针对FDO Data Connection的情况,比如通过FDO连接到Oracle或者SQL Server等数据库,保存在资源数据(Resource Data)中的就是保护用户名、密码等在内的验证信息;对应Symbol等资源来说,资源数据就是字节流了。
资源与资源之间可以有引用关系,比如地图由一系列的图层组成,即Map Definition可以引用Layer Definition。下面的图表示的资源间的引用关系。
永久资源库和临时资源库
资源数据库分为两种,一种是永久性的,他贮存在MapGuide Server的硬盘中,我们把他称作库仓储(Library Repository)。我们可以使用MapGuide Studio对库仓储进行创建、修改、删除等等。还有一种是临时性的资源,我们称之为会话仓储(Session repository)。无论对库仓储还是会话仓储,我们都可以通过MapGuide WebExtension API的资源服务(ResourceService API)来对资源进行创建、修改、删除等操作。
那么资源是如何表示的呢?我们需要有一个资源ID(ResourceIdentifier),基本形式如下:
RepositoryType:[RepositoryName]//[ResourcePath/][ResourceName.ResourceType]
前面提到仓储类型有两种, Library和Session。我们看几个资源ID的例子:
Library://MyStuff/MyLayer.LayerDefinition 表示在库仓储MyStuff目录下的一个图层定义资源;
Session:{SessionId}//TempLayer.LayerDefinition 表示会话仓储中的一个临时图层资源
Library://MyFolder/ 表示库仓储中的一个目录,注意最后的斜线是必要的。
好了,这次我们主要讲了资源和资源仓储这些基本概念,正确理解了这些概念,在我们今后的正确利用资源服务API进行开发是非常有帮助的。今天先到这儿,您有任何问题可以下面评论,或者到MGDN论坛讨论。
峻祁连(Daniel Du)