Graph 如何包括;引证;图中的属性/属性?

Graph 如何包括;引证;图中的属性/属性?,graph,annotations,ontology,vaticle-typeql,Graph,Annotations,Ontology,Vaticle Typeql,我正在创建一个特定于领域的模型,其中包括具有需要定义其原始来源或引用的属性的实体 例如,在graql中: 定义 “国家”子实体 有人口; “证据”子属性数据类型字符串; “填充”子属性数据类型字符串 有证据; 这似乎定义了一个属性的属性,并且在概念上似乎使该属性的含义依赖于某个上下文,可以说该上下文更适合建模为带注释的“事实”实体,并与其他实体建立关系 在不增加模型复杂性的情况下,对这些属性建模的最简单方法是什么 属性的属性 属性的属性不一定像您预期的那样工作。重要的是要记住,在Grakn中

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

例如,在graql中:


定义
“国家”子实体
有人口;
“证据”子属性数据类型字符串;
“填充”子属性数据类型字符串
有证据;

这似乎定义了一个属性的属性,并且在概念上似乎使该属性的含义依赖于某个上下文,可以说该上下文更适合建模为带注释的“事实”实体,并与其他实体建立关系


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

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

也就是说,
population
value
6000万
类型的属性在知识图中只出现一次

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

然后将两个国家添加到知识图表中:

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;
如果我们想象一下,我们能看到的是,我们不能分别说出每个国家的人口来源,因为这两个国家和这两个证据都与同一个人口实例有关

(如图所示)

属性的属性在以下情况下有意义: 属性
短语
你好拥有属性
语言
英语
。也就是说,
language
属性是指短语属性的值

这意味着,如果要记录属性的源,则需要以不同的方式进行操作。我建议三种可能的选择。请注意,出于上述原因,以下三种想法中的每一种都不应拥有证据。在上面的模式中,
人口子属性数据类型字符串有证据应成为
填充子属性数据类型字符串

1。内隐关系

在引擎盖下,Grakn具有实现属性所有权的隐式关系,总是自动生成并以
@has-
作为前缀,例如
@has population
。我们可以将属性附加到这些隐式关系

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

然后定义隐式
总体
属性可以拥有
证据
,并添加示例:

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。关系到隐含关系

如果证据比单个属性更复杂,那么可以更好地将其建模为一种关系,
@具有人口

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。正常的关系

最后,您可以创建一个链接
人口
国家
证据
的关系,如果这些关系太复杂,可以避免使用隐式关系

结论


使用哪种方法取决于您正在建模的域。在回答您的问题时,第一个方法向架构添加了最少的附加元素。

谢谢@James,但是选项1返回了一个错误:
INVALID_参数:GraqlQueryException标签“@has population”有证据没有“isa”,“sub”或“id”。
通过在单独的定义中加载
@has属性来解决。
{$n val "France" isa name; $e val "wikipedia" isa evidence;}
{$n val "UK" isa name; $e val "journal" isa evidence;}
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;