2

私は 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 . 
4

1 に答える 1

2

関数はSTR( value )私の問題を解決しました。事前に値を文字列に変換する必要があります

したがって、次のクエリが機能しました。

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 ( str(?o) = "Huber" ) .
}

ご提案いただきありがとうございます。

于 2018-11-11T17:06:58.420 に答える