web-dev-qa-db-ja.com

SPARQLの日付範囲でフィルターする

JenaのSPARQLエンジンを使用していて、固定日以降のプロパティの値を見つける必要があるため、日付範囲でフィルター処理するクエリを作成しようとしています。

私の日付プロパティは次の形式です。

 Fri May 23 10:20:13 IST 2014 

これより大きい日付を持つ他のプロパティを取得するためにSPARQLクエリを作成するにはどうすればよいですか?

13
cooljohny

その形式のデータでは、日時を解析して解釈する必要があるため、カスタム 拡張関数 をARQ(上級ユーザー向け)に追加せずにデータの範囲をフィルタリングすることはできません。ストリング。

代わりに行うべきことは、すべてのSPARQL実装がサポートする必要がある標準の日時形式xsd:dateTimeにデータを変換することです。この形式の詳細については、 XMLスキーマパート2:データ型 仕様を参照してください。

特定の日付の例は次のように変換されます。

2014-05-23T10:20:13+05:30

また、データやクエリで使用する場合は、タイプxsd:dateTimeの型付きリテラルであることを宣言する必要があります。たとえば、読み取り可能な Turtle RDF構文:

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://example.org> .

:subject :date "2014-05-23T10:20:13+05:30"^^xsd:dateTime .

次に、次のように日付の範囲でフィルタリングするSPARQLクエリを作成できます。

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX : <http://example.org>

SELECT *
WHERE
{
  ?s :date ?date .
  FILTER (?date > "2014-05-23T10:20:13+05:30"^^xsd:dateTime)
}

これにより、?dateが指定された日付より後のすべてのレコードが検索されます

20
RobV