gpt4 book ai didi

sparql - 如何跳过 DBpedia SPARQL 请求中的错误日期?

转载 作者:行者123 更新时间:2023-12-04 02:23:41 24 4
gpt4 key购买 nike

我需要从 DBpedia 获取有关电影的数据。

我在 http://dbpedia-live.openlinksw.com/sparql 上使用如下 SPARQL 查询:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?subject ?label ?released WHERE {
?subject rdf:type <http://dbpedia.org/ontology/Film>.
?subject rdfs:label ?label.
?subject <http://dbpedia.org/ontology/releaseDate> ?released.
FILTER(xsd:date(?released) >= "2000-01-01"^^xsd:date).
} ORDER BY ?released
LIMIT 20

我试图获得 2000 年 1 月 1 日之后发行的电影。
但引擎回答如下:
Virtuoso 22007 Error DT006: Cannot convert 2009-06-31 to datetime : 
Too many days (31, the month has only 30)

SPARQL query:
define sql:big-data-const 0
#output-format:text/html
define sql:signal-void-variables 1 define input:default-graph-uri <http://dbpedia.org> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?subject ?label ?released WHERE {
?subject rdf:type <http://dbpedia.org/ontology/Film>.
?subject rdfs:label ?label.
?subject <http://dbpedia.org/ontology/releaseDate> ?released.
FILTER(xsd:date(?released) >= "2000-01-01"^^xsd:date).
} ORDER BY ?released
LIMIT 20

据我所知,DBpedia 中的数据存在一些错误,引擎无法将字符串数据转换为日期类型,以便与我设置的日期进行比较。引擎会中断查询执行。

所以,问题是:有没有办法告诉引擎跳过所有错误的数据并将所有可以处理的数据返回给我?

最佳答案

您可以使用COALESCE函数以定义无效日期的默认日期:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?subject ?label ?released ?released_fixed WHERE {
?subject rdf:type <http://dbpedia.org/ontology/Film>.
?subject rdfs:label ?label.
?subject <http://dbpedia.org/ontology/releaseDate> ?released.
bind ( coalesce(xsd:datetime(?released), '1000-01-01') as ?released_fixed)
FILTER(xsd:date(coalesce(xsd:datetime(?released), '1000-01-01')) >= "2000-01-01"^^xsd:date).
} ORDER BY ?released
LIMIT 20

此查询提供以下 SPARQL Results on DbPedia Live Endpoint

绑定(bind)结构仅用于显示设置为“1000-01-01”并存储在变量 ?release_fixed 中的固定日期。查询不需要绑定(bind),可以在 SELECT 子句中与 ?release_fixed 一起省略

关于sparql - 如何跳过 DBpedia SPARQL 请求中的错误日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7582158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com