Как сделать выбор гигантской онтологии, построенной из нескольких выровненных эталонных онтологий? - PullRequest
0 голосов
/ 25 сентября 2018

У моей организации есть требование к информации, охватывающее несколько информационных доменов.Чтобы понять это, мы создаем онтологию большой организации, в которой мы выстраиваем несколько эталонных онтологий / словарей для конкретных областей (например, ядро ​​dublin, geosparql, отраслевые информационные модели и т. Д.) И, при необходимости, добавляем концепции в «расширение».онтология (которая затем также выравнивается с эталонными онтологиями).

Совокупность этой выровненной онтологии (> 3000 классов и> 10000 объектных свойств) содержит как неиспользуемые концепции, так и семантические двойники, и для новичка невозможно ориентироваться,Более того, организация желает стандартизировать использование конкретных концепций, поэтому двойные крайне нежелательны.Поэтому мы ищем способ создания SuperAwesomeOntology, который содержит все понятия (и связанные с ними предикаты совы, такие как subClassOf, домен / диапазон и т. Д.), Которые были бы помечены (возможно, чем-то вроде dcterms: isRequiredBy "SuperAwesomeOntology").Результатом должна быть правильная OWL-онтология, которая может храниться в одном файле.

Одно ограничение: это должно быть сделано программно (не будет делать интерфейс аксиом копирования / перемещения / удаления Protege), потому чтоесли одна из эталонных онтологий получит обновление, мы хотим иметь возможность снова визуализировать SuperAwesomeOntology из его самых современных эталонных онтологий и выяснить, есть ли какие-либо конфликты.

Как бы мы поступилиэтот?может SPARQL сделать это, как?Также приветствуются альтернативные предложения для маркировки isRequiredBy.

1 Ответ

0 голосов
/ 05 октября 2018

Если я вас правильно понимаю, вы хотите программно удалить неиспользуемые концепции из большой онтологии или коллекции онтологий / графов, а также удалить концепции / классы, которые вы определили как дубликаты, путем взаимосвязи.

Идентифицированные дубликаты легко удалить:

  1. Определите, что для вас является дубликатом.Например, узлы на любом конце ссылки owl: sameAs или skos: closeMatch находятся за пределами вашего основного графа (поэтому вы не удаляете «оригинал»).
  2. Построение нового графика с использованием запроса SPARQL:

    construct {?s ?p ?o.}
    {
     ?s ?p ?o.
     filter not exists {graph ?g {?s owl:sameAs ?x.} filter(?g!=<http://my.core.graph>)}
     filter not exists {graph ?g {?o owl:sameAs ?x.} filter(?g!=<http://my.core.graph>)}
    }
    

    Я проверил этот запрос на синтаксис и производительность, но не на корректность.

Неиспользуемые понятия труднее удалить:

Во-первых, опять же, вам нужно определить, что означает для вас "неиспользованный".Однако этот критерий, безусловно, будет включать в себя достижимость или «связность» в объединенном графе, где вы хотите выбрать только компонент графа, который содержит вашу основную онтологию.Проблема заключается в том, что, если вы рассматриваете тройки как ненаправленные ребра, вы, вероятно, получите связанный граф (то есть только один компонент и не нужно удалять узлы), потому что иерархия типов часто связывает все.Вы могли бы принять во внимание направление ребер, то есть включить только ресурсы Y, где есть направленный путь от любого ресурса X в вашей основной онтологии до Y. Это обеспечит вам возможность подняться вверх по иерархии подклассов целевой онтологии до, например,Сова: Дело, но не снова.Проблема в том, что вы не знаете, какой другой тип ребер находится в целевой онтологии и в каком направлении они движутся, но вы можете пока использовать только rdfs: subClassOfdge.

Если вы достаточно определили свой "«Неиспользуемая концепция» или если вы хотите попробовать ее с каким-то экспериментальным определением, вы можете использовать библиотеку графов или приложение для анализа графов и импортировать туда свой код.

Вот пример того, как импортироватьконечная точка SPARQL в библиотеку визуализации графов JavaScript Cytoscape.js, она также может использоваться в узле.Однако вам нужно серьезно адаптировать код.

Или вы делаете это снова в SPARQL, используя пути к свойствам SPARQL 1.1.Проблема заключается в том, что они могут оказать значительное влияние на производительность (или даже сложность, которая слишком велика, чтобы когда-либо ее выполнять), особенно применительно к большому количеству ресурсов и неограниченной длине пути.Таким образом, вполне возможно, что запрос, подобный этому, истекает, но вы можете попробовать его адаптировать:

construct {?s ?p ?o.}
{
 {?s ?p ?o.}
 graph <http://my.core.graph> {?x rdfs:subClassOf ?X.}
 {?x (<>|!<>)* ?s.}
}

Оператор ?x rdfs:subClassOf ?X - это просто идентификатор, для которого вы хотите использовать ресурсы вашей основной онтологии.источник указывает, я не мог получить действительный запрос без этого.Когда я применяю оператор графа к выражению пути, я получаю синтаксическую ошибку от Virtuoso.

...