Sparql 我如何用一个单一的结构构建关于某些个体的RDF图?
我在SPARQL中有一个构造查询,用于检索有关合同的详细信息:Sparql 我如何用一个单一的结构构建关于某些个体的RDF图?,sparql,jena,semantic-web,Sparql,Jena,Semantic Web,我在SPARQL中有一个构造查询,用于检索有关合同的详细信息: CONSTRUCT { ?contract dcterm:identifier ?id . ?contract rdfs:label ?label . ?contract pc:bidder ?bidder . } WHERE { OPTIONAL { ?contract dcterm:identifier ?id . } OPTIONAL { ?contract rdfs:
CONSTRUCT {
?contract dcterm:identifier ?id .
?contract rdfs:label ?label .
?contract pc:bidder ?bidder .
}
WHERE {
OPTIONAL {
?contract dcterm:identifier ?id .
}
OPTIONAL {
?contract rdfs:label ?label .
}
OPTIONAL {
?contract pc:tender ?tender .
?tender pc:bidder ?bidder .
}
}
我有一个合同列表,例如pc:c1、pc:c2,我想在一个查询(或一个HTTP调用)中检索这两个合同的详细信息
第一个想法是用每个uri替换?contract变量,并避免其他变量之间的冲突:
CONSTRUCT {
pc:c1 dcterm:identifier ?id1 .
pc:c1 rdfs:label ?label1 .
pc:c1 pc:bidder ?bidder1 .
pc:c2 dcterm:identifier ?id2 .
pc:c2 rdfs:label ?label2 .
pc:c2 pc:bidder ?bidder2 .
}
WHERE {
OPTIONAL {
pc:c1 dcterm:identifier ?id1 .
}
OPTIONAL {
pc:c1 rdfs:label ?label1 .
}
OPTIONAL {
?pc:c1 pc:tender ?tender1 .
?tender1 pc:bidder ?bidder1 .
}
OPTIONAL {
pc:c2 dcterm:identifier ?id2 .
}
OPTIONAL {
pc:c2 rdfs:label ?label2 .
}
OPTIONAL {
?pc:c2 pc:tender ?tender2 .
?tender2 pc:bidder ?bidder2 .
}
}
问题是,对于许多URI,查询可能会变得相当大
有没有更简洁的方法来写呢
我尝试使用IN运算符(-17.4.1.9),但Virtuoso似乎无法解析查询。
同样,VALUES关键字()似乎是一个很好的解决方案,但Jena似乎没有正确地解析它。只需使用value来指定所需的?contract的值。(Jena确实支持值,所以您的测试可能有输入错误?)
构造{
?合同条款:标识符?id。
?合同RDF:标签?标签。
?合同pc:投标人?投标人。
}
在哪里{
价值?合同{pc:c1 pc:c2}#——这是新的一行
可选的{
?合同条款:标识符?id。
}
可选的{
?合同RDF:标签?标签。
}
可选的{
?合同pc:投标书?投标书。
?投标pc:投标人?投标人。
}
}
对于单个属性匹配,还可以使用属性的值将其缩短。您还可以使用属性路径缩短投标人零件:
CONSTRUCT {
?contract ?p ?o .
?contract pc:bidder ?bidder .
}
WHERE {
VALUES ?contract { pc:c1 pc:c2 }
VALUES ?p { dcterm:identifier rdfs:label }
OPTIONAL {
?contract ?p ?o
}
OPTIONAL {
?contract pc:tender/pc:bidder ?bidder .
}
}
哪个Jena版本不工作?你说得对,错误是在URI内部值之间使用了分隔符!很干净,还有你的第二个提示!谢谢