如何在图表中包含 "citation" attributes/properties?
How to include "citation" attributes/properties in graphs?
我正在创建一个特定于领域的模型,其中包含具有需要定义其原始来源或引用的属性的实体。
例如在 graql 中:
define
"country" sub entity
has population;
"evidence" sub attribute datatype string;
"population" sub attribute datatype string
has evidence;
这似乎定义了属性的属性,并且在概念上似乎使属性的含义依赖于特定的上下文,可以说将其建模为与其他实体有关系的带注释的 "fact" 实体更好。
在不增加模型复杂性的情况下对这些属性进行建模的最简单方法是什么?
属性的属性
属性的属性不一定像您预期的那样工作。重要的是要记住,在 Grakn 中,对于具有特定值的特定类型的属性,图中只有一个节点。
也就是说population
值sixty 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;
如果我们想象一下,我们可以看到我们无法分别说出每个国家的人口来源,因为这两个国家和两个证据都与同一个人口实例相关联。
(在 Grakn Workbase Visualiser 中可视化)
属性的属性在以下情况下有意义:
属性 phrase
值 Hi there!
拥有属性 language
值 English
。也就是说,language
属性指的是词组属性的 值 。
这意味着如果您想记录属性的来源,您需要采取不同的方式。我建议三种可能的选择。请注意,出于上述原因,对于以下三个想法中的每一个,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';
现在我们能够消除英国人口证据与法国人口证据的歧义。我们可以这样查询:
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;
3。正常关系
最后,您可以创建链接 population
、country
和 evidence
的关系,如果这些关系看起来过于复杂,可以避免使用隐式关系。
结论
使用哪种方法取决于您建模的域。在回答您的问题时,第一种方法向架构添加的附加元素最少。
我正在创建一个特定于领域的模型,其中包含具有需要定义其原始来源或引用的属性的实体。
例如在 graql 中:
define
"country" sub entity
has population;
"evidence" sub attribute datatype string;
"population" sub attribute datatype string
has evidence;
这似乎定义了属性的属性,并且在概念上似乎使属性的含义依赖于特定的上下文,可以说将其建模为与其他实体有关系的带注释的 "fact" 实体更好。
在不增加模型复杂性的情况下对这些属性进行建模的最简单方法是什么?
属性的属性 属性的属性不一定像您预期的那样工作。重要的是要记住,在 Grakn 中,对于具有特定值的特定类型的属性,图中只有一个节点。
也就是说population
值sixty 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;
如果我们想象一下,我们可以看到我们无法分别说出每个国家的人口来源,因为这两个国家和两个证据都与同一个人口实例相关联。
(在 Grakn Workbase Visualiser 中可视化)
属性的属性在以下情况下有意义:
属性 phrase
值 Hi there!
拥有属性 language
值 English
。也就是说,language
属性指的是词组属性的 值 。
这意味着如果您想记录属性的来源,您需要采取不同的方式。我建议三种可能的选择。请注意,出于上述原因,对于以下三个想法中的每一个,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';
现在我们能够消除英国人口证据与法国人口证据的歧义。我们可以这样查询:
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;
3。正常关系
最后,您可以创建链接 population
、country
和 evidence
的关系,如果这些关系看起来过于复杂,可以避免使用隐式关系。
结论
使用哪种方法取决于您建模的域。在回答您的问题时,第一种方法向架构添加的附加元素最少。