我正在学习语义Web编程,并尝试为Android平台开发应用程序。我的应用程序中有一个文本字段,用户可以在其中输入SPARQL查询。

我想知道是否可以从整个SPARQL查询中提取SPARQL端点。例如,在查询SELECT ?class FROM <http://myexample.com> WHERE{?class a owl:Class} Order By ?class中,我想提取http://myexample.com

或者从类似SELECT ?dataType ?data WHERE { <http://nasa.dataincubator.org/launch/1961-012> ?dataType ?data.}的查询中提取http://nasa.dataincubator.org/launch/1961-012

我想使用提取的端点,然后从SPARQL端点内检索该本体的类,属性等。

是否可以仅提取端点?

最佳答案

从示例查询中提取URI http://myexample.com/很容易。要么解析查询并检查解析结果(如何执行取决于您使用的查询解析器),要么编写一个简单的正则表达式来捕获FROM子句并提取其后的URI。

但是,FROM子句中的URI不是SPARQL端点。 SPARQL查询中的FROM子句指定了一个命名图,通常来说,该图是您要查询的整个数据集的子集。但是它并没有告诉您查询将通过哪个SPARQL端点执行。

通常,SPARQL端点不是查询本身的一部分,而是由您用来实际执行查询的工具确定的。

在一种情况下,您可以从查询本身确定使用的端点,即SPARQL查询是否使用SERVICE子句,例如:

SELECT *
WHERE {
   SERVICE <http://example.org/sparql> { ?s ?p ?o }
}
LIMIT 100


但是,不能保证使用此构造,实际上,大多数SPARQL查询都不使用它。

08-25 14:17
查看更多