如何在图形中包含“引用”属性/属性?

时间:2018-11-29 11:59:16

标签: graph annotations ontology graql

我正在创建一个特定于域的模型,其中包括具有属性的实体,这些属性的原始来源或引文需要定义。

例如在graql中:

define "country" sub entity has population; "evidence" sub attribute datatype string; "population" sub attribute datatype string has evidence;

这似乎定义了属性的属性,并且从概念上讲似乎使属性的含义取决于特定的上下文,可以说,将其更好地建模为带有其他实体关系的带注释的“事实”实体。

在不增加模型复杂性的情况下,对此类属性建模的最简单方法是什么?

1 个答案:

答案 0 :(得分:3)

属性的属性 属性的属性不一定像您期望的那样起作用。重要的是要记住,在Grakn中,对于具有特定值的特定类型的属性,图形中将只有一个节点。

也就是说,类型populationsixty million的属性在知识图中只会出现一次。

如果我们稍稍更改您的架构以添加国家/地区名称(也不需要在类型周围使用单引号):

define
country sub entity
    has population,
    has name;
name sub attribute datatype string; 
    evidence sub attribute datatype string;
    population sub attribute datatype string
        has evidence;

然后将两个国家/地区添加到知识图中:

insert $uk isa country, has name 'UK', has population $p; $p 'sixty million' has evidence 'journal';
insert $fr isa country, has name 'France', has population $p; $p 'sixty million' has evidence 'wikipedia';
commit;

如果将其形象化,我们可以看到的是我们无法单独区分每个国家的人口来源,因为这两个国家和这两个证据都与同一个人口实例有关。

Visualised in Grakn Workbase Visualiser

(在Grakn Workbase Visualiser中显示)

在以下情况下,属性的属性才有意义: 具有属性phraseHi there!的属性languageEnglish。也就是说,language属性是指短语属性的 value

这意味着,如果您想记录属性的来源,则需要做不同的事情。我建议三个可能的选择。请注意,出于上述原因,对于以下三个想法,population都不应该拥有evidence。在以上population sub attribute datatype string has evidence;的模式中,应该变成population sub attribute datatype string;

1。内隐关系

内幕之下,Grakn具有隐式关系来实现属性所有权,该属性总是自动生成并以@has-为前缀,例如@has-population。我们可以将属性附加到这些隐式关系上!

首先删除我们在上面插入的实例(请注意,将删除图中的所有实体和属性!)

match $x isa entity; $y isa attribute; delete $x, $y;

然后定义隐式population属性可以拥有evidence并添加示例:

define @has-population has evidence;

insert $uk isa country, has name 'UK', has population $p via $r; $p 'sixty million'; $r has evidence 'journal';
insert $fr isa country, has name 'France', has population $p via $r; $p 'sixty million'; $r has evidence 'wikipedia';

enter image description here

现在,我们可以将英国人口的证据与法国人口的证据区分开。我们可以查询以下内容:

match $c isa country, has name $n, has population $p via $r; 
$p 'sixty million'; $r has evidence $e; get $n, $e;

结果:

{$n val "France" isa name; $e val "wikipedia" isa evidence;}
{$n val "UK" isa name; $e val "journal" isa evidence;}

2。关系到隐式关系

如果证据比单个属性更复杂,则可以将其更好地建模为一种关系,其中@has-population起着作用。

define 
information-sourcing sub relationship, 
    relates sourced-information, 
    relates information-source;

@has-population plays sourced-information;

publication sub entity, 
    plays information-source;

insert $uk isa country, has name 'UK', has population $p via $r; $p 'sixty million'; $pub isa publication; $i(sourced-information: $r, information-source: $pub) isa information-sourcing;
insert $uk isa country, has name 'France', has population $p via $r; $p 'sixty million'; $pub isa publication; $i(sourced-information: $r, information-source: $pub) isa information-sourcing;

Link to implicit relationships via normal relationships

3。正常关系

最后,您可以创建一个链接populationcountryevidence的关系,如果它们看起来太复杂,则避免使用隐式关系。

结论

使用哪种方法取决于您要建模的域。为了回答您的问题,第一种方法向架构中添加了最少的其他元素。