簡単に言えば、違いはありません。
より長い答えは次のとおりです。SPARQLクエリは2つの部分からなると考えてください。
変数バインディングのリストを生成するクエリ(WHERE)部分(ただし、一部の変数はバインドされていない場合があります)。
結果をまとめる部分。SELECT
、、、、または。ASK
_CONSTRUCT
DESCRIBE
SELECT *
事実上、クエリが返すものです。SELECT ?v1 ?v2
結果を取得し、他の変数を削除した別の結果セットを生成します。ASK
結果があるかどうかを確認するだけです。
CONSTRUCT
テンプレートを使用して、結果からRDFを作成します。結果行ごとに、変数をバインドし、ステートメントを結果モデルに追加します。テンプレートトリプルにバインドされていない変数が含まれている場合、それはスキップされます。
DESCRIBE
これは、各結果ノードを取得し、それに関連付けられたトリプルを見つけて、それらを結果モデルに追加するため、最も珍しいものです。他とは異なり、クエリが一致するよりも多くの情報を含めることができます。
したがってUNION
、OPTIONAL
クエリに、、、を含めることは、すべてのフォームで許可されます。バインドされていない変数が原因で、トリプルが欠落する可能性があります。
あなたの質問はあまり意味がありません。と違いはありません{?s ?p ?o}
。あなたは何をしようとしているのですか?わかりました、今はもっと理にかなっています。
以下の説明を考えると、次のことが必要なようです。
construct { <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o }
from <http://localhost:8890/DAV/ranking>
where {
{ <http://seekda.com/providers/cdyne.com/PhoneNotify> so:hasEndpoint ?s.
?s ?p ?o }
union
{ <http://seekda.com/providers/cdyne.com/PhoneNotify> ?p ?o }
}