私は C-SPARQL を使用しており、ストリームから受信したトリプルをクエリしたいと考えています。ただし、正確な文字列リテラルに一致させたいクエリを使用すると、問題が発生しました。私は通常、クエリで結果を取得します (データは文字列から取得されます) が、リテラルの文字列値に完全一致を追加すると、常に結果が得られません。あたかも一致が見つからないかのように。ただし、ストリームから受信したすべてのトリプルを見ると、文字列リテラルに一致するエントリがあります。
これが私のクエリの例です:
REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s]
WHERE {
?s person:name "Huber" .
}
また、次の 2 つの例であるフィルターと正規表現を使用してみました。
REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?o
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s]
WHERE {
?s person:name ?o FILTER ( ?o = "Huber" ) .
}
REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?o
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s]
WHERE {
?s person:name ?o FILTER (regex(?o, '^Huber$')) .
}
一致がないかのように、どのクエリでも結果が得られません。
次のクエリを実行すると、name = Huber で多くの結果が得られます。
REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?o
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s]
WHERE {
?s person:name ?o .
}
C-SPARQL が SPARQL のすべての機能をサポートしているかどうかはわかりません。C-SPARQL では round() がサポートされていないという別の投稿を読みました。正確な文字列の一致は基本的な機能であるため、少なくとも私の意見では、何か間違ったことをしたり、詳細を見逃したりする可能性があるかどうかはわかりません。SPARQL でクエリを試し、トリプルストアにクエリを実行しましたが、すべてのクエリが正常に機能しました。
そのため、ここで C-SPARQL で文字列の一致が機能しない理由について少し混乱しています。ヒントや提案はありますか?
編集(私のデータがどのように見えるかについての詳細情報):
C-SPARQL を使用してクエリしようとしているデータは、Web ストリームからの JSON-LD エントリです。ストリームは、Triplewaveを介して作成および公開されます。
JSON-LD の小さな例を次に示します。
[
{
"@id": "http://Stream/d7e4e816-0931-42ce-a21a-cbfaa552855d",
"http://www.w3.org/ns/prov#generatedAtTime": [
{
"@value": "2018-11-14T07:08:45.182Z"
}
],
"@graph": [
{
"@id": "http://schema.org/Person#1234",
"http://schema.org/name": [
{
"@value": "Huber"
}
]
},
{
"@id": "http://schema.org/Job#1234",
"http://schema.org/title"": [
{
"@value": "Professor"
}
]
}
]
}
]
タイプ情報や言語タグはありません。
C-SPARQLを使用して Web ストリームをクエリするために、Websocket を介して JSON-LD データを受け取る RdfStream を実装し、グラフ内のすべてのエントリの RdfQuadruple を作成して RdfStream に入れました。
RdfQuadruple の例は次のとおりです。
http://schema.org/Person#1234 http://schema.org/name Huber .