まず、私はDBpediaのを確認するために、生年月日のためだけxsd:date
データ型を使用することを考えて、このクエリを試してみることができます。
select distinct datatype(?birthDate) where {
?actor <http://purl.org/linguistics/gold/hypernym> dbr:Actor ;
dbo:birthDate ?birthDate .
}
問題がで述べたような値のいくつかは、汚れているということですコメント、彼らは浄化する必要があります。それにはいくつかの回避策がありますが、それがうまくいくかどうかはわかりません。
最初に、同じ意図された日付のすべての形式が統一されていることを保証する必要があります。DISTINCT
をフィルタに使用できます。
の値を取る必要がありますが、xsd:dateTime
は実際には許容範囲を示していますが、なんらかの理由でyyyy-m-d ....
の値を受け取ります。その結果、?birthDate
をxsd:dateTime
に変換し、xsd:date
に変換します。たとえば、try select xsd:date (xsd:dateTime ("2000-1-1")) {}
の場合、結果は"2000-01-01"^^xsd:date
となります。どういうわけか、それだけで動作します。
次に、一部のデータが汚れているため、オプションはありませんが、これらのデータを削除するには、2000-0-0
などの値を除外する必要があります。これを行うには、?birthDate
の値を必要な形式に転送する必要があります。 ?birthDate
をキャストできない場合は'!'
を返しますので、この目的のために(coalesce(xsd:dateTime(xsd:date(?birthDate)), '!'))
を実行します。
私は動作するクエリを持っていませんが、原則的には助けてください。
これはできません。リテラルの字句を 'STR(?birthDate)'と使っても、 "1962-07-04"と "1962-7-3"の文字列が違うことになります。それはDBpedia respのデータ品質の問題です。ウィキペディアデータの正規化/クレンジングは、残念なことにクライアントコードであなた次第です。 – AKSW
唯一の方法は、dbpediaクエリに基づいて独自のクリーンアップデータセットを作成することです。 –
あなたはこれらの列のうちどれを気にしますか? 'SAMPLE'は行く方法かもしれません... – TallTed