3

Sparql1.0のみをサポートするsparqlエンドポイントの1つに対してsparqlクエリを実行しています。
次のクエリを使用して、ストアからユーザーのリストを取得しようとしています。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX tmp: <http://example.com/schema/temp#>
PREFIX resource: <http://example.com/2010/record/schema#>
Describe ?userURI
WHERE 
{
    ?userURI rdf:type resource:User.
    OPTIONAL
    {               
        ?userURI tmp:dataCleanupStatus ?cleanUpStatus.
        ?userURI tmp:lastDataCleanupDate ?cleanUpDate.                  
    }
    FILTER 
    ( 
        (!bound(?cleanUpStatus) || ?cleanUpStatus !="Running")
    )
                    FILTER(    
        (!bound(?cleanUpDate) || ?cleanUpDate < "2012-04-11" )
    )

}

上記のクエリで、ユーザーを取得しようとしています。ここで:

  1. クリーンアップステータストリプルが存在しないか、ステータスが「実行中」ではありません
  2. clearnUpDateトリプルが存在しないか、指定された日付未満です。

返すべきレコードを返していない。 xsd
関数 を使用する必要があると言うかもしれませんが、これらはSparql1.1でのみサポートされています。


ご意見をお聞かせください。
変更されたクエリ:


PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX tmp: <http://example.com/schema/temp#>
PREFIX resource: <http://example.com/2010/record/schema#>
Describe ?userURI
WHERE 
{
    ?userURI rdf:type resource:User.
    OPTIONAL
    {               
        ?userURI tmp:dataCleanupStatus ?cleanUpStatus.

    }

    OPTIONAL
    {               
        ?userURI tmp:lastDataCleanupDate ?cleanUpDate.                  
    }
    FILTER 
    ( 
        !bound(?cleanUpStatus) || ?cleanUpStatus !="Running"
    )
    FILTER
    (    
        !bound(?cleanUpDate) || ?cleanUpDate < "2012-04-11" 
    )

}


4

1 に答える 1

6

xsd:date元のデータに型付きリテラルとして格納されていると仮定すると、問題はおそらく日付比較にあります。型を変換せずに文字列を日付と比較することはできません。

試してみるいくつかのこと:

?cleanUpDate < "2012-04-11"^^xsd:date    # Compare against date
STR(?cleanUpDate) < "2012-04-11"         # Convert to string before comparison

また、データの構造によっては、 と に 2 つの別個OPTIONALのブロックが必要になる場合が?cleanUpStatusあります?cleanUpDate

于 2012-04-13T10:05:02.443 に答える