You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TARQL转换CSV为RDF时日期类型转换及字段丢失问题

问题根因

xsd:date、xsd:dateTime 对输入字符串格式有强制规范:

  • xsd:date 仅接受 YYYY-MM-DD 格式的字符串
  • xsd:dateTime 仅接受 YYYY-MM-DDThh:mm:ss[可选时区] 格式的字符串

CSV中存储的日期为04-09-2021这类非标准格式,直接调用xsd:dateTime(?Date)会触发类型转换失败,最终?date变量被绑定为空值。TARQL构造三元组时会自动跳过对象为空的条目,因此最终输出的RDF中完全不显示date字段。

修复方案

先通过字符串函数把原始日期整理为XSD支持的标准格式,再执行类型转换即可。

注意:需要先确认原始日期的分段规则是日-月-年还是月-日-年,调整拼接顺序即可。以下示例默认原始日期为日-月-年格式:

PREFIX ex: <http://www.hobbiton.com/schema>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

CONSTRUCT {
  ?product_iri ex:product ?Product ; 
  ex:farmer ?Farmer ;
  ex:date ?date ;
  ex:count ?count . 
}
FROM <file:farming.csv>
WHERE { 
  BIND(REPLACE(STR(?Product),"[ ]","_") AS ?product)
  BIND(IRI(CONCAT('http://www.hobbiton.com/schema/product#', ?product)) AS ?product_iri) 
  BIND(xsd:integer(?Count) AS ?count)
  # 拆分原始日期的三个分段
  BIND(STRBEFORE(?Date, "-") AS ?day)
  BIND(STRBEFORE(STRAFTER(?Date, "-"), "-") AS ?month)
  BIND(STRAFTER(STRAFTER(?Date, "-"), "-") AS ?year)
  # 拼接为YYYY-MM-DD标准格式,若原始是月-日-年,交换?day和?month位置即可
  BIND(CONCAT(?year, "-", ?month, "-", ?day) AS ?standard_date_str)
  # 转换为xsd:date类型,需dateTime类型则替换为xsd:dateTime(CONCAT(?standard_date_str, "T00:00:00"))
  BIND(xsd:date(?standard_date_str) AS ?date)
}
输出效果

运行修正后的脚本,输出的TURTLE文件会正常携带日期字段,示例片段如下:

<http://www.hobbiton.com/schema/product#pumpkin>
        ex:product  "pumpkin" ;
        ex:farmer   "Bolger" ;
        ex:date     "2021-09-04"^^xsd:date ;
        ex:count    29 .

<http://www.hobbiton.com/schema/product#tomato>
        ex:product  "tomato" ;
        ex:farmer   "Bolger" ;
        ex:date     "2021-09-04"^^xsd:date ;
        ex:count    62 .

内容的提问来源于stack exchange,提问作者EMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:09:25