Sparql过滤器:获取匹配的所有详细信息

时间:2012-12-13 11:39:34

标签: sparql

我有以下sparql查询:

PREFIX spec: <http://rdfs.org/sioc/spec/> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX constraint: <http://purl.org/vocab/constraint/constraint#>

SELECT  
(sample(?FName) as ?fName)
(sample(?Midname) as ?midname) 
(sample(?User) as ?user)  

(GROUP_CONCAT(DISTINCT ?userRole;  separator='; ') AS ?UserRole)
WHERE {
    GRAPH <http://example.com/> 
    {
        ?User spec:email ?Email .   
        ?User foaf:firstName ?FirstName .
        ?User foaf:surname ?Midname .
        OPTIONAL
        {
            ?User constraint:containsConstraint ?constraint .               
            ?constraint constraint:constrains ?userRoleUri .
            ?userRoleUri spec:name ?userRole.
        }
FILTER (str(?userRoleUri) IN("http://example.com/roles/admin", "http://example.com/roles/moderator"))

    }
} GROUP BY ?FName  ORDER BY ASC(?FName)

此查询的作用是返回匹配的用户。 因此,如果用户“A”列出了3个角色:编辑器,管理员和主持人,则它仅为用户显示两个角色。 喜欢:

A - Mid - a@abc.om - admin;moderator

我想从查询中做的是: 由于用户A匹配任何给定的过滤条件,因此应列出其所有角色。有没有办法改善这个查询?我也试过在过滤器中使用sub select和regex,但是:(

提前致谢 Sparqler

3 个答案:

答案 0 :(得分:2)

建议解答答案.Sematicweb.com在很大程度上解决了问题。这正是我所需要的,但是,非常可能。

**答案:** http://answers.semanticweb.com/questions/20016/sparql-filter-get-all-details-of-a-match

由于

答案 1 :(得分:0)

首先,我无法在您的FILTER子句中看到“编辑器”角色。 回覆。显示所有相关角色,为什么不简单地使用以下SELECT子句:

SELECT ?FName ?Midname ?userRole

答案 2 :(得分:0)

所以,只有当他是管理员或主持人时,您才想拥有用户的角色列表。

在这种情况下,我会添加第二个userRoleUri。

类似的东西:

?User constraint:containsConstraint ?constraint .               
?constraint constraint:constrains ?userRoleUri .
?constraint constraint:constrains ?userRoleUri2 .
?userRoleUri2 spec:name ?userRole.

所以这会过滤你的用户在?userRoleUri上但是然后列出所有的?userRole来自?userRoleUri2

我认为这应该有用。