现在我们有的查询的形式总是这样:地名常量+:Predicate +?变量名,因此一个简单的策略便是:
1.将有相同地名常量的所有TriplePattern合起来形成一个NodeRelation。其中projections列表中包含已解析过的变量名,即与变量名对应的Tag名,which are already stated in the 映射文件中;而在原有D2RQ中condition中所包含的Constant的关系即是我们需要的地名。这里存在的一个问题是,是否需要重写或者重命名现有的NodeRelation的定义和解析方法。
2.每一个NodeRelation都能作为一个Connection被发送到远端服务器,然后取得结果。假设最简单的情况是,一个SPARQL查询中只有出现了一个地址(即只有一个NodeRelation),那么直接可以把这个NodeRelation中的变量列表(并非projections)添加到整个查询的变量列表中。在D2RQ取得数据,并加以解析和包装后,可供前端程序员取数据。
3.假如一个SPARQL查询中有多个不同的地名出现(即会产生多个NodeRelation),那么我们首先需要多次请求远端服务器提供结果(对于前端程序员来说这是透明的)。其次是在每一次发送请求并取得结果后都要立即解析结果,并将(变量名,结果字符)添加到返回的结果列表中。
现在需要认真解决的问题是:
1.重新审视查询和影射文件的解释过程,并有计划的修改
2.完成向远端服务器提交的查询申请的形成过程
3.结果的解析和包装过程
当然这样说还太高层,具体的细节也不清楚,在做的过程中还需要仔细辨别和思考。
嗨....... 都很麻烦,这个东西做完之后我一定要去海边看鲸鱼然后住上一阵。
No comments:
Post a Comment