我正在学习语义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查询都不使用它。