Атрибуты атрибутов Атрибуты атрибутов не обязательно работают так, как вы могли ожидать.Важно помнить, что в 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
, которые избегают использования неявных отношений, если они кажутся слишком сложными.
Заключение
Какой метод использовать, зависит от моделируемой области.В ответ на ваш вопрос первый метод добавляет в схему наименьшее количество дополнительных элементов.