6.1 SPARQL を使用したトリプルのクエリ
6.1.11 ソリューション修飾子
ソリューション修飾子は、SELECTクエリの結果セットを変更します。このセクションで は、次のソリューション修飾子を使用して、クエリから返される内容を変更する方法に ついて説明します。
•
DISTINCTキーワード•
LIMITキーワード•
ORDER BYキーワード•
OFFSETキーワード•
サブクエリ•
射影式注:
DISTINCT以外の修飾子は、WHERE節の後に記述します。
6.1.11.1 DISTINCT
キーワード結果セットから重複した結果を取り除くときは、DISTINCTキーワードを使用します。
次に例を示します。
SELECT DISTINCT ?p WHERE {?s ?p ?o}
このクエリは、persondataデータセット内のすべてのトリプルについて、すべての述語 を
1
回だけ返します。6.1.11.2 LIMIT
キーワード表示される
SPARQL
クエリの結果をさらに制限する場合は、LIMITキーワードを使用し ます。例えば、DBpedia
データセットには、次のクエリにマッチする数千もの著者が含 まれる可能性があります。PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX foaf:<http://xmlns.com/foaf/0.1/>
SELECT ?x ?fn ?ln
WHERE{?x dc:description "Author"@en ; foaf:name ?fn ;
foaf:surname ?ln.}
表示するマッチング結果の数を指定するには、WHERE節の波括弧の後にLIMITキーワー ドと整数(変数は不可)を追加します。
次に例を示します。
PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX foaf:<http://xmlns.com/foaf/0.1/>
SELECT ?x ?fn ?ln
WHERE{?x dc:description "Author"@en ; foaf:name ?fn ;
foaf:surname ?ln.}
LIMIT 10
クエリの結果は、最初の
10
件のマッチに制限されます。6.1.11.3 ORDER BY
キーワードクエリ結果をソートする基準となる
1
つあるいは複数の変数の値を指定する場合は、ORDER BY節を使用します。「SPARQL 1.1 Query Language」勧告で説明されているように、
バインドされていない変数、空白ノード、IRI、または
RDF
リテラルを順序付けするこ ともできます。http://www.w3.org/TR/sparql11-query/#modOrderBy
デフォルトの順序は昇順です。
次に例を示します。
PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?x ?fn ?ln
WHERE{?x dc:description "Author" ; foaf:name ?fn ;
foaf:surname ?ln.}
ORDER BY ?ln ?fn LIMIT 10
結果は、まず著者の姓(?ln)の順序、次に著者の名(?fn)の順序で並べられます。
結果の順序を降順に変更するには、DESCキーワードを使用し、返される値の変数を括弧 内に配置します。
次に例を示します。
PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?x ?fn ?ln
WHERE{?x dc:description "Author"@en ; foaf:name ?fn ;
foaf:surname ?ln .}
ORDER BY DESC (?ln) LIMIT 10
6.1.11.4 OFFSET
キーワードOFFSET修飾子は、ページネーション(マッチしたクエリ結果を指定された件数だけス
キップして残りの結果を返す)を行う場合に使用します。このキーワードをLIMITおよ
びORDER BYキーワードと組み合わせて使用することで、データセットからデータのさ
まざまな部分を取得できます。例えば、さまざまな開始箇所から結果のページを作成で
次の例では、Authorを昇順でクエリし、その結果のリストを位置
8
から開始した最初 の10
件に制限します。PREFIX dc:<http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?x ?fn ?ln
WHERE{?x dc:description "Author"@en ; foaf:name ?fn ;
foaf:surname ?ln.}
ORDER BY ?x OFFSET 8 LIMIT 10
結果が返され、最初の
8
件のマッチはスキップされます。6.1.11.5
サブクエリサブクエリを使用すると、複数のクエリの結果を結合できます。また、1つあるいは複数 のクエリを別のクエリの中で入れ子にできます。サブクエリは、それぞれが波括弧の対 で囲まれています。通常、サブクエリは、ソリューション修飾子と併用します。次の例 では、誕生地が
London
であるPolitician
をクエリし、結果を最初の10
件に制限します。PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX db: <http://dbpedia.org/resource/>
PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?location ?date WHERE
{ ?person dc:description "Politician"@en . {SELECT ?location
WHERE{?person onto:birthPlace db:London .
?person onto:birthPlace ?location } }
{SELECT ?date
WHERE{?person onto:birthDate ?date . } }
{SELECT ?name
WHERE{ ?person foaf:name ?name } }
} LIMIT 10
6.1.11.6
射影式SPARQL
のSELECTクエリ内で射影式を使用すると、バインドされた変数だけではなく、任意の
SPARQL
式を射影できます。これにより、クエリ内で新しい値を作成できます。このタイプのクエリでは、クエリの結果セットのカラムとして、変数、定数
IRI、定数
リテラル、関数呼び出し、またはその他の式から生成される値をSELECTで使用します。注:
関数には、
SPARQL
のビルトイン関数と実装でサポートされている拡張 関数の両方を含めることができます。射影式は、丸括弧で囲む必要があります。また、ASキーワードを使用してエイリアス を指定する必要があります。シンタックスは
(
expression AS ?var)
です。次に例を示します。
PREFIX ex: <http://example.org/>
SELECT ?Item (?price * ?qty AS ?total_price) WHERE {?Item ex:price ?price}
このクエリは、
RDF
データセットに含まれるグラフ内では発生していない?total_priceの値を返します。