Как включить атрибуты / свойства цитирования в графы?
Я создаю модель для конкретного домена, которая включает в себя объекты, имеющие атрибуты, исходный источник или цитату которых необходимо определить.
В гракл например:
define
"country" sub entity
has population;
"evidence" sub attribute datatype string;
"population" sub attribute datatype string
has evidence;
Кажется, что это определяет атрибут атрибута, и концептуально, кажется, делает значение атрибута зависимым от определенного контекста, который, возможно, лучше смоделировать как аннотированные "фактические" сущности со связями с другими сущностями.
Как проще всего моделировать такие атрибуты, не увеличивая сложность модели?
1 ответ
Атрибуты атрибутов Атрибуты атрибутов не обязательно работают так, как вы могли бы ожидать. Важно помнить, что в 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)
Атрибуты атрибутов имеют смысл в случае, подобном: атрибут phrase
значение Hi there!
владение атрибутом language
значение English
, Это language
Атрибут ссылается на значение атрибута фразы.
Это означает, что если вы хотите записать источник атрибута, вам нужно действовать по-другому. Я предлагаю три варианта:
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;
- Нормальные отношения Наконец, вы можете создать отношения, которые связывают
population
,country
, а такжеevidence
, что позволяет избежать использования неявных отношений, если они кажутся слишком сложными.
Заключение Какой метод использовать, зависит от домена, который вы моделируете. В ответ на ваш вопрос первый метод добавляет наименьшее количество дополнительных элементов в схему.