使用fuseki减少查询sparql的字符串长度



当我启动Fuseki服务器时,我使用以下命令:

fuseki-server --config=config-orphadata.ttl

在这个ttl文件中,我可以编写一些前缀规则:

@prefix orphanet: <http://www.orpha.net/ORDO/Orphanet_#> .
@prefix ORDO: <http://www.orpha.net/ORDO/> .

在SPARQL查询中,我必须编写所有前缀值,比如:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX obo: <http://purl.obolibrary.org/obo/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX oboInOwl: <http://www.geneontology.org/formats/oboInOwl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX Orphanet_: <http://www.orpha.net/ORDO/Orphanet_#>
PREFIX ORDO: <http://www.orpha.net/ORDO/>
select ?s ?p ?o ?m ?v ?e WHERE {
?s ?p ?o.
optional {?o ?m ?v. 
?v rdfs:label ?e}.
filter (?s = ORDO:Orphanet_2004)
}
ORDER BY ?o

如果我不写前缀,查询就不起作用。。。配置文件中定义的规则前缀似乎在查询中不可用。

在SPARQL查询中编写的所有元素都将转到GET信息URL。

在启动fuseki服务器后,是否可以通过在配置文件中放置前缀来减少该查询的字符串长度?

据我所知,不支持直接这样做。

破解通用解决方案

我还没有找到一个可以在解析查询时修改ARQ使用的前缀的位置,但这并不意味着它不存在。如果你想追求这一点,我的建议是深入研究GrepCode,直到找到一个可以替换默认工厂/解析程序的地方,然后将用于替换的代码写入你的某个自定义类的static初始值设定项中。这可能是非常肮脏的,所以你可能不值得这么做。

在类路径中的某个位置启动Fuseki并使用新类(org.ididhax.ChangePrefixes),然后将[] ja:loadClass "org.ididhax.ChangePrefixes"放置在Fuseki汇编文件中。这将导致Fuseki加载您的类,这将修改可用的前缀。

Web变通方法/破解

如果您从web界面使用Fuseki,请更新Fuseki用于web表单的模板,以便为您提交的任何查询附加一组默认前缀。然后Fuseki解析的SPARQL将是有效的。

Java变通方法/破解#1

这是我有时使用的一种变通方法。无论如何,99%的查询都是通过编程方式构建的。您所做的是构建一个PrefixMappingImpl,并用您喜欢的前缀加载它。编写一些代码,使用所需的SPARQLString,并以正确的格式在其前面加上这些前缀。那么,代码的其余部分就不在乎了。

/* 'MyQueryFactory' hides the appending of your prefixes and the call to
 * the actual Jena 'QueryFactory'
 */
final String mySparqlString = "SELECT * WHERE { ?bob rdf:type vocab:Cat }";
final Query query = MyQueryFactory.create(mySparqlString);

Java变通方法/破解#2

这通常是我个人的喜好。如果您的术语有JenaSchemagenJavaClass词汇表,那么根本不要使用前缀。静态替换这些词汇表中的字段,并使用精确的术语构建SPARQL。你永远不会亲自看到一个URI,如果你可能正在更改你的词汇表,它会很方便(无论你在哪里使用一个已经不存在的术语,它都会给你带来方便的编译错误)。示例如下:

final Query query = QueryFactory.create(
  "SELECT * WHERE {n"+
  " ?bob <"+RDF.type+"> <"+MyVocab.Cat+"> .n"+
  "}");

最新更新