gpt4 book ai didi

sparql - 如何转换xsd :Date into xsd:DateTime in SPARQL (dbpedia)?

转载 作者:行者123 更新时间:2023-12-05 03:07:58 25 4
gpt4 key购买 nike

我想从 DBpedia 获取关于人的数据,包括他们的出生日期和他们的死亡日期,但是对于日期,返回的类型是 xsd:Date当我需要 xsd:DateTime 中的日期时格式。

我们能否将结果 ( xsd:Date ) 转换为 xsd:DateTime在查询中?如果是,如何?

  • xsd:Date --> "1940-01-01"
  • xsd:DateTime --> "1940-01-01T00:00:00"

我试过下面的查询,但它不工作......

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?person ?name ?birthDate ?deathDate
WHERE {
?person rdf:type <http://dbpedia.org/ontology/Person>
?person rdfs:label ?name.
?person dbo:birthDate ?birthDate.
?person dbo:deathDate ?deathDate.
strdt(concat(substr(?birthDate, 7, 4), '-', substr(?birthDate, 1, 2), '-', substr(?birthDate, 4, 2), 'T00:00:00'), xsd:dateTime).
strdt(concat(substr(?deathDate, 7, 4), '-', substr(?deathDate, 1, 2), '-', substr(?deathDate, 4, 2), 'T00:00:00'), xsd:dateTime).
}

谢谢!

最佳答案

(作为回答,因为评论不是很可读)

正如 AKSW 所说,数据略有损坏(例如“1800-1-1”),如果您尝试转换 xsd:dateTime(?birthDate),virtuoso 会提示。由于专家的怪癖,您不能使用更令人愉快的 coalesce(xsd:dateTime(?birthDate), ?birthDate),它应该返回第一个非空、非错误值。

所以我们必须用正则表达式来保护自己:

if(
regex(str(?birthDate), '\\d{4}-\\d\\d-\\d\\d'),
xsd:dateTime(?birthDate),
?birthDate)

即:如果 ?birthDate 的字符串值是正确的形式(4 位 - 2 位 - 2 位)则转换,否则使用原始值。

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?person ?name
(if(regex(str(?birthDate), '\\d{4}-\\d\\d-\\d\\d'), xsd:dateTime(?birthDate), ?birthDate) as ?birthDateDT)
(if(regex(str(?deathDate), '\\d{4}-\\d\\d-\\d\\d'), xsd:dateTime(?deathDate), ?deathDate) as ?deathDateDT)
WHERE {
?person rdf:type <http://dbpedia.org/ontology/Person> .
?person rdfs:label ?name.
?person dbo:birthDate ?birthDate.
?person dbo:deathDate ?deathDate.
}

Try this in dbpedia

关于sparql - 如何转换xsd :Date into xsd:DateTime in SPARQL (dbpedia)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46319814/

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