Пустой узел R2RML в rr:objectMap
Мне было интересно, как я могу смоделировать следующее с помощью r2rml:
Человек -> имеет адрес -> Пустой узел [Название улицы, почтовый индекс, город]
Я уверен, что я могу добавить название улицы, почтовый индекс и город к пустому узлу в rr:objectMap
(Дополнительный вопрос: rr:class
обязательно для rr:BlankNode
?)
Какие-либо предложения?:)
<#Person>
rr:logicalTable [ rr:tableName "PERSON" ];
rr:subjectMap [
rr:template "http://ex.com/data/PersonClass/{ID}";
rr:class ex:PersonClass;
];
rr:preciateObjectMap [
rr:predicate ex:hasAddress;
rr:objectMap [
rr:termType rr:BlankNode;
## How/where can a add the street name, postal code, city? ##
];
].
1 ответ
Должно быть не так уж сложно. Сначала вы берете созданное вами отображение R2RML и создаете пустой узел для адреса. Присвойте ему уникальное имя с помощью шаблона, но не присваивайте ему IRI, поэтому он интерпретируется как пустой узел.
<#Person>
rr:logicalTable [ rr:tableName "PERSON" ];
rr:subjectMap [
rr:template "http://ex.com/data/PersonClass/{ID}";
rr:class ex:PersonClass;
];
rr:preciateObjectMap [
rr:predicate ex:hasAddress;
rr:objectMap [
rr:template "BlankAddressNode{ADDRESSID}";
rr:termType rr:BlankNode;
];
].
Примечание: ADDRESSID в таблице PERSON считается внешним по отношению к первичному ключу таблицы ADDRESS.
Затем вы создаете пустой узел с помощью rdf:type и всего остального.
<#Address>
rr:logicalTable [ rr:tableName "ADDRESS" ];
rr:subjectMap [
rr:template "BlankAddressNode{ID}";
rr:termType rr:BlankNode;
rr:class ex:AddressClass;
];
rr:predicateObjectMap [
rr:predicate ex:street;
rr:objectMap [ rr:column "Street"]
];
.
Примечание: ID является первичным ключом таблицы ADDRESS.
Вы также можете сделать это с помощью объединения... но я думаю, что с точки зрения учебника это более понятно.