2

次の 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 つの役割がリストされている場合、ユーザーの役割は 2 つだけ表示されます。お気に入り :

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

クエリからやりたかったことは次のとおりです。ユーザー A は指定されたフィルター条件のいずれかに一致するため、すべてのロールを一覧表示する必要があります。このクエリを改善する方法はありますか? フィルターでもサブセレクトと正規表現を使用してみましたが、:(

よろしくお願いします

4

3 に答える 3

2

Answers.Sematicweb.com に関する提案された解決策は、問題を大幅に解決します。それはまさに私が必要としているものですが、非常に可能です。

**これに対する回答: ** http://answers.semanticweb.com/questions/20016/sparql-filter-get-all-details-of-a-match

ありがとう

于 2013-01-18T11:51:25.130 に答える
0

したがって、ユーザーが管理者またはモデレーターである場合にのみ、ユーザーの役割のリストを取得したいとします。

この場合、2 番目の userRoleUri を追加します。

このようなもの:

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

したがって、これは ?userRoleUri でユーザーをフィルタリングしますが、?userRoleUri2 を介してすべての ?userRole を一覧表示します

私はそれがうまくいくと思います。

于 2012-12-14T10:10:32.907 に答える
0

まず、FILTER 句に「編集者」の役割がありません。再。関連するすべてのロールを表示するには、単純に次の SELECT 句を使用してください。

SELECT ?FName ?Midname ?userRole

?

于 2012-12-14T10:03:02.090 に答える