Sparql查询,带可选和筛选器
我编写了sparql查询,如果我绑定了一个变量($company_parameter=XXX),那么结果就是属于XXX公司内部某个人的所有文档;如果我在没有绑定的情况下执行查询,它将返回数据库中的所有文档(甚至是那些不在任何公司工作的人的文档) 查询是这样的,在这里我添加或不添加一行Sparql查询,带可选和筛选器,sparql,Sparql,我编写了sparql查询,如果我绑定了一个变量($company_parameter=XXX),那么结果就是属于XXX公司内部某个人的所有文档;如果我在没有绑定的情况下执行查询,它将返回数据库中的所有文档(甚至是那些不在任何公司工作的人的文档) 查询是这样的,在这里我添加或不添加一行 BIND(XXX作为公司参数)。取决于我想要的结果: SELECT ?doc ?person ?company_label WHERE { ?doc rdf:type <documen
BIND(XXX作为公司参数)。
取决于我想要的结果:
SELECT
?doc
?person
?company_label
WHERE {
?doc rdf:type <document> .
OPTIONAL {
?doc <belongsTo> ?person .
OPTIONAL {
?person <worksin> ?company .
?company rdf:type <company> .
?company rdfs:label ?company_label .
}
}
FILTER (!BOUND($company_parameter) || $company_parameter = ?company) .
}
选择
?医生
?人
?公司标签
何处{
?文件rdf:类型。
可选{
医生,病人。
可选{
个人公司。
?公司rdf:类型。
?公司rdfs:标签?公司标签。
}
}
过滤器(!BOUND($company_参数)|$company_参数=?company)。
}
当我没有指定绑定,但是
当我指定绑定时会出现一个问题,因为结果包含指定公司的所有记录加上一些(但不是全部)没有公司的记录
这是应该发生的事情吗?
在比较参数之前,我是否应该始终向筛选器添加一个类似于
BIND(?company)
的复选框?为什么不能执行BIND(XXX as?company)
并删除筛选器?甚至更好。更通用的方法是使用VALUES?company{XXX}
并将其放在开头:选择?doc?person?company_标签,其中{VALUES?company{XXX}?doc rdf:type.可选{doc?person.可选{person?company rdf:type.?company rdfs:label?company_label.}
我不能在没有过滤器的情况下仅使用绑定,因为公司部分位于可选的内部,这样做将提取所有记录。值也是如此。另外,我有点拘束,这个查询是由编辑器生成的,并且不是直接执行的,因此我不能根据它是否应该与填充的参数一起工作来更改它,它应该在两种情况下都工作。