4

パブリック ドメインの電卓を作成しています。そのコードは https://github.com/okfn/pdcalc/blob/master/pd/map.rdfで入手できます。

sparql 1.0 で発生した問題のため、コードは現在、作品のパブリック ドメインのステータスを適切に判断できません。日付に対して算術演算を実行できないようです。著者の死後 70 年を経て出版されているかどうか。残念ながら、標準の python の rdf ライブラリはまだ sparql 1.1 のサポートを実装していません。したがって、この制限を克服する方法について何か提案があるかどうか、または sparql をより適切にサポートする python ライブラリを知っているかどうか疑問に思っていました。

フィードバックをお待ちしております。

4

2 に答える 2

3

SPARQL 1.1 でさえ、デフォルトでは日付の算術演算をサポートしていません。SPARQL 演算子のマッピングに関するセクションを参照してください。算術演算は数値データ型でのみ定義されます。

この目的のための拡張機能を提供する SPARQL 1.1 実装がいくつかあるかもしれませんが、Python ではなく、現在この組み込み機能を備えているものはすぐにはわかりません。

最善の策は、選択した SPARQL エンジンの開発者と連絡を取り、そのような拡張機能を実装するようにせがむか、もちろん独自の拡張機能を開発することです。

回避策として、ほとんどの SPARQL エンジン (1.0 でも) は日付の比較操作をサポートしているため、並べ替えや比較などを行うことができますが、クエリ結果に対してカスタムの後処理を行う必要があります。

更新かなり重要なことを見落としていることに気付きました.SPARQL 1.1はもちろん、日時値の年と月のコンポーネントを整数として返すなどの関数をサポートしており、おそらくラウンドアバウト演算を行うために使用できyear()ますmonth()日付。

于 2011-11-20T20:35:29.747 に答える
1

実装が仕様に従っている場合、SPARQL 1.0 では日付に対して算術演算を行うことはできませんが、少なくとも日付を比較できるはずです。

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT *
WHERE
{
  # Your Triple Patterns here
  FILTER( ?date > "2011-11-20T00:00:00Z"^^xsd:dateTime)
}

それでも、著者の死亡日を取り、それに 70 を追加する必要があるという問題は回避できません。おそらく必要なことは、クライアント コードでその部分を計算し、それを SPARQL クエリに挿入することです。したがって、これは、2 つのクエリを実行する必要がある場合があることを意味します。1 つは情報を取得するためのもので、もう 1 つは公共事業であるかどうかを計算するためのものです。おそらく、余分なクエリを保存するために、クライアント コードだけで 2 番目の部分を計算できます。

これは、SPARQL 1.1 に準拠した優れた Python ライブラリができるまで理想的ではありませんが、それはあなたが行き詰まっているものです。

于 2011-11-20T20:34:21.343 に答える