Rdf 处理三元组的重复 形势
假设我们有两个三重文件,如下所示:Rdf 处理三元组的重复 形势,rdf,semantic-web,Rdf,Semantic Web,假设我们有两个三重文件,如下所示: data1.triple(来自“数据源A”) 前缀:personX vocab:名称“X”。 前缀:personX vocab:出生日期“2000-01-01”。 数据2.triple(来自“数据源B”) 前缀:personX vocab:名称“X”。 前缀:personX vocab:出生日期“2000-01-01”。 由于数据1和数据2完全相同,name和birthdate将分别导入一次 但是如果data1和data2的personX的出生日期
- data1.triple(来自“数据源A”)
前缀:personX vocab:名称“X”。 前缀:personX vocab:出生日期“2000-01-01”。
- 数据2.triple(来自“数据源B”)
前缀:personX vocab:名称“X”。 前缀:personX vocab:出生日期“2000-01-01”。
name
和birthdate
将分别导入一次
但是如果data1和data2的personX的出生日期值不同,会怎样呢
- data1.triple(来自“数据源A”)
前缀:personX vocab:名称“X”。 前缀:personX vocab:出生日期“2000-01-01”。
- 数据2.triple(来自“数据源B”)
前缀:personX vocab:名称“X”。 前缀:personX vocab:生日“1999-01-01”。
- “某些谓词每一个实体应有一条边”
- “数据源A”的优先级高于“数据源B”
因此,“personX”的“name”谓词只有一次。没有任何东西可以限制数据中可能出现的内容。RDF是一组三元组,这就是您得到的全部。然而,这并不意味着你没有希望。让我们先回答你的第二个问题:
- “数据源A”的优先级高于“数据源B”
select?生日{
值(?优先级?图){(1:A)(2:B)}
图?图{:人:生日?生日}
}
按顺序?优先顺序
限制1
然后,在从图B中获取任何生日属性之前,先从图A中获取任何生日属性
一种扩展性较差的方法,但如果您只有两个图,并且您知道每个图中最多有一个值,则仍然适合使用:
选择(合并(?birthdateA,?birthdateB)作为生日){
图:A{:人:生日?生日A}
图:B{:人:生日?生日B}
}
- “某些谓词每一个实体应有一条边”
select?坏人{
坏人:生日?生日
}
坏人分组
有(计数(不同的?出生日期)!=1)
要指定只有一个值,您需要开始使用本体语言,例如OWL,您可以在其中声明,例如:
人子类(确切地说是出生日期)
现在,这不会阻止某人断言不一致的数据,但是支持数据类型推理的OWL推理器将能够在出现不一致时识别不一致。没有任何东西可以限制数据中可能出现的内容。RDF是一组三元组,这就是您得到的全部。然而,这并不意味着你没有希望。让我们先回答你的第二个问题:
- “数据源A”的优先级高于“数据源B”
select?生日{
值(?优先级?图){(1:A)(2:B)}
图?图{:人:生日?生日}
}
按顺序?优先顺序
限制1
然后,在从图B中获取任何生日属性之前,先从图A中获取任何生日属性
一种扩展性较差的方法,但如果您只有两个图,并且您知道每个图中最多有一个值,则仍然适合使用:
选择(合并(?birthdateA,?birthdateB)作为生日){
图:A{:人:生日?生日A}
图:B{:人:生日?生日B}
}
- “某些谓词每一个实体应有一条边”
select?坏人{
坏人:生日?生日
}
坏人分组
有(计数(不同的?出生日期)!=1)
要指定只有一个值,您需要开始使用本体语言,例如OWL,您可以在其中声明,例如:
人子类(确切地说是出生日期)
现在,这不会阻止某人断言不一致的数据,但是支持数据类型推理的OWL推理器将能够在出现不一致时识别不一致。没有任何东西可以限制数据中可能出现的内容。RDF是一组三元组,这就是您得到的全部。然而,这并不意味着你没有希望。让我们先回答你的第二个问题:
- “数据源A”的优先级高于“数据源B”
select?生日{
值(?优先级?图){(1:A)(2:B)}
图?图{:人:生日?生日}
}
按顺序?优先顺序
限制1
然后,在从图B中获取任何生日属性之前,先从图A中获取任何生日属性
小范围