Как мне выполнить поиск в базе данных RDF, чтобы найти сегменты графа, которые больше всего перекрывают образец графа?
Например, скажем, в моей базе данных хранятся следующие произвольные графы:
entity1 [
type "TOP" ;
attr1 [
attr11 [
attr111 "apple" ;
] ;
attr12 [
attr121 "orange" ;
] ;
attr13 [
attr131 "banana" ;
] ;
] ;
attr2 [
attr21 [
attr211 "falcon" ;
] ;
attr22 [
attr221 "pigeon" ;
] ;
attr23 [
attr231 "parrot" ;
] ;
] ;
] .
entity2 [
type "TOP" ;
attr11 [
attr111 "apple" ;
] ;
attr12 [
attr121 "orange" ;
] ;
] .
entity3 [
type "TOP" ;
attr2 [
attr_middle [
attr21 [
attr211 "falcon" ;
] ;
attr22 [
attr221 "pigeon" ;
] ;
attr23 [
attr231 "parrot" ;
] ;
] ;
] ;
] .
А теперь скажите, что у меня есть пример графика:
sample [
type "TOP" ;
attr11 [
attr111 "apple" ;
] ;
attr12 [
attr121 "orange" ;
] ;
attr13 [
attr131 "banana" ;
] ;
attr21 [
attr211 "falcon" ;
] ;
attr22 [
attr221 "pigeon" ;
] ;
attr23 [
attr231 "parrot" ;
] ;
] .
Очевидно, что ничто в базе данных не соответствует образцу идеально, но каждая сущность соответствует ему частично, даже если в каждом из них существуют тройные запятые на разных уровнях.график.
Как найти наиболее близкие совпадения с образцом?В этом случае я ожидаю, что запрос вернется, сначала отсортированное наилучшее совпадение, [entity1, entity3, entity2]
.
Я все еще немного новичок в RDF, так что извините, если моя терминология выключена.Поскольку я в настоящее время понимаю базы данных RDF, то, что я пытаюсь сделать, обычно не то, как они используются.Если я хочу найти сущности, «содержащие» отношение attr111 = «apple», с помощью запроса SPARQL, я, как правило, должен предположить, что отношение находится в фиксированном местоположении относительно каждого объекта, тогда как поиск выполняется в тройках в произвольных местах относительно«корень» гораздо сложнее.Это правильно?