Types SPARQL:使用不同的数据类型进行区分

Types SPARQL:使用不同的数据类型进行区分,types,sparql,distinct,Types,Sparql,Distinct,我在数据库pedia上的SPARQL中有一个请求, 我想让演员们知道他们的出生日期,名字。。。 例如: select ?actor ?name ?birthDate where { ?actor <http://purl.org/linguistics/gold/hypernym> dbr:Actor ; rdfs:label ?name ; dbo:birthDate ?birthDate . filter(?name = "Tom Cruise

我在数据库pedia上的SPARQL中有一个请求, 我想让演员们知道他们的出生日期,名字。。。 例如:

select ?actor ?name ?birthDate where { 
    ?actor <http://purl.org/linguistics/gold/hypernym> dbr:Actor ;     
    rdfs:label ?name ; dbo:birthDate ?birthDate .
    filter(?name = "Tom Cruise"@en)
} LIMIT 5
选择演员姓名出生日期,其中{
?演员dbr:演员;
rdfs:标签?名称;dbo:生日?生日。
过滤器(?name=“Tom Cruise”@en)
}限制5
我得到这个结果:

我关心的是
birthDate
的数据类型,我正在寻找一种方法来声明
DISTINCT
类型不敏感,因此在以前的请求中只有一个结果


有什么想法吗?

首先,我认为DBpedia只使用
xsd:date
数据类型作为生日,为了确保,您可以尝试以下查询:

select distinct datatype(?birthDate)  where { 
  ?actor <http://purl.org/linguistics/gold/hypernym> dbr:Actor ;     
  dbo:birthDate ?birthDate .   
} 
选择不同的数据类型(?生日),其中{
?演员dbr:演员;
出生日期?出生日期。
} 
问题是有些值是脏的,正如注释中提到的,它们需要被清理。有一些解决方法,但不确定是否适合您

首先,您应该保证相同预期日期的所有格式都是统一的,以便可以使用
DISTINCT
进行过滤

出于某种原因,我并不真正了解,
xsd:dateTime
在实践中显示了一些公差,虽然它应该采用
yyyy-mm-dd….
,但它接受形式为
yyyy-m-d….
的值。因此,将
?生日
转换为
xsd:dateTime
,然后转换为
xsd:date
。例如,
尝试选择xsd:date(xsd:dateTime(“2000-1-1”)){}
,结果是
“2000-01-01”^^xsd:date
。不知怎么的,它只是工作

然后,由于一些数据是脏的,您别无选择,只能删除这些数据,即应排除
2000-0-0
之类的值。为此,您应确保成功将
?birthDate
的值转换为所需格式。为此,
(coalesce(xsd:dateTime(xsd:date(?birthDate)),“!”)
会这样做,因为它返回
“!”如果无法转换
?出生日期


我没有有效的查询,但原则上这应该会有所帮助。

这是不可能的。即使您只是将literal的词汇形式与
STR(?birthDate)
一起使用,您也必须使用不同的字符串“1962-07-04”和“1962-7-3”。这是dbpediaresp中的数据质量问题。维基百科。不幸的是,客户机代码中的数据规范化/清理由您决定。唯一的方法是基于BPedia查询创建您自己的已清理数据集。您是否关心最后会出现哪一行<代码>示例
可能是一种方法,但事实并非如此“接受格式为
yyyy-m-d….
的值-这是错误且非法的语法。这是数据中的数据质量问题,一些三元组存储允许加载这些三元组,而无需验证文本语法。@MedianHilal嗨,我正在关注我的一个项目的答案。我想知道DBpedia在哪里提取“”中的信息。请让我知道你的想法:)@EmJ你能发布一个问题,详细解释你需要什么吗?我不能清楚地理解你的要求。