次の 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 は指定されたフィルター条件のいずれかに一致するため、すべてのロールを一覧表示する必要があります。このクエリを改善する方法はありますか? フィルターでもサブセレクトと正規表現を使用してみましたが、:(
よろしくお願いします