- PVSM.RU - https://www.pvsm.ru -

Семантический веб: краткий обзор технологий и инструментов

Что такое семантический веб?

Semantic web (или Web 3.0) – это расширение web, в котором информация представлена в структурированном и формализованном виде, что позволяет машинам лучше "понимать" и интерпретировать данные. Цель семантического веба – сделать данные в интернете понятными не только людям, но и компьютерам, чтобы они могли анализировать и использовать их более эффективно. Основой семантического веба являются такие технологии, как RDF (Resource Description Framework), OWL (Web Ontology Language) и SPARQL (язык запросов для RDF).

История семантического веба началась с концепции, предложенной Тимом Бернерс-Ли, изобретателем Всемирной паутины. Эта идея обрела популярность благодаря работе консорциума W3C (World Wide Web Consortium), который разработал стандарты и спецификации для семантического веба, включая RDF и OWL. Сегодня семантический веб активно применяется в различных областях, таких как наука, медицина, корпоративные данные и интернет вещей, где требуется глубокая интеграция и обработка больших объемов данных.

RDF (Resource Description Framework)

RDF [1] (wiki: RDF [2]) – это стандарт, используемый для описания информации в виде триплетов (subject, predicate, object), что делает его основой для представления данных в виде графов. RDF позволяет моделировать отношения между объектами и представлять их как связные структуры. Subject в триплете - это либо IRI сущности, о котором идет речь, либо т.н. blank-node, обычно выступающей в качестве связи между триплетами. Predicate всегда является IRI - это свойство или отношение между субъектом и объектом. И, наконец, object - значение свойства (литерал), другая сущность (IRI) или blank node.
Пример RDF триплета:

<http://example.org/person/1> <http://xmlns.com/foaf/0.1/name> "Alice" .

OWL (Ontology Web Language)

OWL [3] (последняя редакция OWL2) – это язык для создания и использования онтологий. Онтология [4] - это формализация некоторой области знаний, пример онтологии - FOAF [5] (Friend of a Friend). OWL расширяет возможности RDF, позволяя более точно и выразительно моделировать отношения и ограничения между сущностями. OWL используется для описания доменов знания и выражения логических связей между концепциями. Основные элементы OWL (см полная спецификация [6]):

  • Классы: группы сущностей (например, "Человек").

  • Объектные свойства: отношения между экземплярами класса (например, "имеет друга").

  • Свойства данных (Datatype Properties): отношения между экземпляром класса и литералом (например, "имеет рост 180 см").

  • Индивидуалы (экземпляры): конкретные экземпляры классов (например, "Алиса"). Индивидуалы могут быть анонимными, т.е. представимыми как blank-node в RDF.

  • Типы данных (Datatype): каждый литерал имеет тип данных, например xsd:string, или "рост" из примера выше.

  • Аксиомы: логические утверждения, описывающие связи и ограничения (например, "Примат является подклассом Животные").

OWL DL (Description Logic) - основной диалект OWL, который гарантирует завершимость логического вывода, помимо него существуют профили EL, QL, RL [7], которые накладывают различные ограничения на множество аксиом OWL для упрощения ризонинга. OWL ризонинг или инференсинг (reasoning, inferencing) – это процесс логического вывода, выполняемого на основе онтологии. С помощью ризонеров (reasoners) можно проверять логическую совместимость онтологии, извлекать неявные знания и выполнять другие логические операции, такие как проверка принадлежности классов, вывод отношений и проверка аксиом. OWL ризонеры, такие как HermiT [8], Pellet [9], Fact++ [10], openllet [11], используют алгоритмы, основанные на дескриптивной логике (DL), для выполнения таких задач. Пример простейшего ризонинга: онтология содержит аксиомы "Человек это Примат", "Примат это Животное", из этого набора аксиом можно получить новое знание: "Человек это Животное". В каком-то смысле, OWL и ризонинг - это старший брат AI, являющийся, в отличие от AI, белым ящиком.

Другие технологии

SPARQL

SPARQL [12] (рекурсивный акроним от англ. SPARQL Protocol and RDF Query Language) - это язык запросов для RDF данных. SPARQL поддерживает сложные запросы, включая фильтрацию, агрегацию и объединение данных.
Пример:

SELECT ?name
WHERE {
    ?person a <http://xmlns.com/foaf/0.1/Person> .
    ?person <http://xmlns.com/foaf/0.1/name> ?name .
}

В данном примере происходит поиск имени экземпляра класса foaf:Person.

SHACL

SHACL [13] (Shapes Constraint Language) используется для валидации RDF данных на соответствие заданным ограничениям. Он позволяет определить формы (shapes), которые описывают допустимые структуры данных. Пример SHACL формы в синтаксисе turtle:

ex:PersonShape
    a sh:NodeShape ;
    sh:targetClass foaf:Person ;
    sh:property [
        sh:path foaf:name ;
        sh:datatype xsd:string ;
        sh:minCount 1 ;
    ] .

Здесь накладывается ограничение: экземпляр типа foaf:Person должен иметь по меньшей мере одно свойство foaf:name типа xsd:string.

Инструменты для работы с RDF и OWL

Apache Jena

Apache Jena [14] – это Java-фреймворк для работы с семантическими технологиями, включая RDF, OWL, SPARQL, SHACL. Jena позволяет создавать и управлять графами, выполнять запросы SPARQL и использовать SHACL для валидации данных. Основные компоненты Apache Jena:

  • Core. Jena Core API предоставляет основные классы и интерфейсы для работы с моделями RDF. Этот компонент позволяет разработчикам создавать, читать, модифицировать и сохранять RDF-графы, а также работать с RDF данными в различных форматах (Turtle, RDF/XML, N-Triples и др.).Также, core содержит Inference API – это компонент для выполнения логических выводов (reasoning) на основе RDF данных и онтологий, определенных в OWL или RDFS. С его помощью можно добавлять в RDF модель новые триплеты, которые логически следуют из существующих данных. Надо отметить, что ризонинг в Jena довольно ограничен. Полноценный ризонинг надо искать в отдельных библиотеках (см выше). Пример создания графа с единственным триплетом:

Model m = ModelFactory.createDefaultModel();
m.createResource("http://example.org/person/1")
    .addLiteral(m.createProperty("http://xmlns.com/foaf/0.1/name"),"Alice");
  • ARQ (SPARQL Query Engine) - это движок для выполнения SPARQL-запросов. Он поддерживает все версии SPARQL (1.0, 1.1) и обеспечивает выполнение запросов к RDF данным, включая сложные запросы с фильтрацией, агрегацией и модификацией данных. Пример SPARQL запроса (выборка всех триплетов):

try (QueryExecution exec = QueryExecutionFactory.create(
        QueryFactory.create(
                "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>n" +
                        "SELECT ?s ?o WHERE { ?s a ?o }"
        ), model)) {
    ResultSet res = exec.execSelect();
    while (res.hasNext()) {
        System.out.println(res.next());
    }
}
  • TDB (Triple Data Base). TDB – это компонент для хранения и управления RDF данными на диске. Он поддерживает масштабируемое и эффективное управление большими объемами данных и позволяет выполнять запросы с использованием ARQ напрямую из хранилища.

Dataset dataset = TDB2Factory.connectDataset(directory);
ataset.begin(ReadWrite.WRITE);
try {
    Model model = dataset.getDefaultModel();
    ...
    dataset.commit();
} finally {
    dataset.end();
}
  • Fuseki (SPARQL Server). Fuseki – это сервер SPARQL, который позволяет разработчикам развертывать и предоставлять доступ к RDF данным через HTTP. Fuseki предоставляет RESTful интерфейс для выполнения SPARQL-запросов.

  • ontapi (Ontology API). Существует legacy ontapi и новый модуль jena-ontapi(*). Главный актор тут OntModel - это расширение Model для работы с онтологиями, поддерживающее как OWL так и RDFS онтологии. Этот компонент предоставляет средства для работы с классами, свойствами и другими OWL-конструктами. Пример:

OntModel model = OntModelFactory.createModel().setNsPrefixes(OntModelFactory.STANDARD);
model.createOntClass("http://xmlns.com/foaf/0.1/Person")
        .addSuperClass(model.createOntClass("http://xmlns.com/foaf/0.1/foaf:Agent"));
  • IRI (Internationalized Resource Identifiers). IRI [15] - это компонент для работы с международными идентификаторами ресурсов, который позволяет создавать, читать и валидировать IRI.

IRIFactory factory = IRIFactory.jenaImplementation();
String iriString = "http://example.org/resource/Алиса";
IRI iri = factory.create(iriString);
System.out.println(iri.hasViolation(false));
  • SHACL (Shapes Constraint Language). SHACL поддерживается как расширение для валидации RDF данных на соответствие определенным ограничениям и формам.

Model dataModel = ModelFactory.createDefaultModel();
dataModel.read("data.ttl", "ttl");
Model shapesModel = ModelFactory.createDefaultModel();
shapesModel.read("shapes.ttl", "ttl");
Shapes shapes = Shapes.parse(shapesModel);
ValidationReport report = ShaclValidator.get().validate(shapes, dataModel);
System.out.println(report.conforms());

OWLAPI

OWLAPI [16] - это Java-библиотека для работы с OWL онтологиями.В отличие от Jena-ontapi, где данные и схема представляются в виде OWL-конструктов, OWLAPI оперирует исключительно аксиомами и сущностями: в OWLAPI каждая онтология - это набор атомарных аксиом и сущностей (класс, индивидуал, etc). Иными словами, OWLAPI воплощает аксиом-центричный подход, тогда как Jena-ontapi - RDF-центричный подход. Существует так же ONTAPI [17](**) - связующее звено между OWLAPI и Apache Jena - т.е. имплементация OWLAPI над RDF (jena-ontapi).

OWLDataFactory df = OntManagers.getDataFactory();
OWLOntologyManager om = OntManagers.createDirectManager();
OWLOntology ontology = om.createOntology(IRI.create(iri));
ontology.addAxiom(df.getOWLDeclarationAxiom(df.getOWLClass("http://xmlns.com/foaf/0.1/Person")));
        ontology.addAxiom(df.getOWLClassAssertionAxiom(df.getOWLClass("http://xmlns.com/foaf/0.1/Person"),
        df.getOWLNamedIndividual("http://example.org/person/1")));

Здесь мы создаем следующий RDF:

foaf:Person rdf:type owl:Class .
<http://example.org/person/1> rdf:type foaf:Person .

RDF4J (ранее Sesame)

RDF4J [18] - Java-фреймворк для работы с RDF и SPARQL.
Обеспечивает создание и управление RDF данными, выполнение SPARQL-запросов, подключение к триплсторам и поддержку различных форматов сериализации.

Model model = new LinkedHashModel();
SimpleValueFactory valueFactory = SimpleValueFactory.getInstance();
IRI alice = valueFactory.createIRI("http://example.org/Alice");
model.add(alice, FOAF.NAME, valueFactory.createLiteral("Alice"));

Owlready2

Owlready2 [19] – это библиотека для работы с OWL-онтологиями на языке Python. Она поддерживает работу с OWL2 и использует движок HermiT для выполнения логических выводов.

onto = get_ontology("http://example.org/onto.owl")
with onto:
    class Person(Thing):
        pass
    class has_name(DataProperty, FunctionalProperty):
        range = [str]
alice = Person("Alice")
alice.has_name = "Alice"

Stardog

Stardog [20] – графовая база данных с поддержкой семантических технологий, включая RDF и OWL. Она поддерживает работу с SPARQL и предоставляет мощные инструменты для работы с данными и онтологиями.

ConnectionConfiguration connConfig = ConnectionConfiguration
    .to("myDatabase")
    .server("http://localhost:5820")
    .credentials("admin", "admin");
try (Connection conn = connConfig.connect()) {
    Statement statement = Values.statement(
            Values.iri("http://example.org/Alice"),
            Values.iri("http://example.org/knows"),
            Values.iri("http://example.org/Bob")
    );
    conn.add().statement(statement);
    String sparqlQuery = ...;
    try (SelectQueryResult result = conn.select(sparqlQuery).execute()) {
        while (result.hasNext()) {
            System.out.println(result.next());
        }
    }
}

GraphDB

GraphDB [21] – триплстор от Ontotext, предназначенный для хранения и управления RDF данными. Он поддерживает SPARQL и интеграцию с различными инструментами для аналитики и визуализации.

Protégé

Protégé [22] – это популярный инструмент, десктопное приложение, для создания и редактирования OWL-онтологий. Он предоставляет визуальный интерфейс для работы с классами, свойствами и аксиомами, а также поддерживает плагины для расширенной функциональности. Под капотом Protégé использует OWLAPI.

TopBraid Composer

TopBraid Composer [23] – коммерческий инструмент, десктопное приложение, для моделирования онтологий и работы с RDF данными. Он поддерживает OWL, SPARQL и SHACL и предоставляет мощные функции для визуализации и управления данными. Под капотом TopBraid Composer использует Apache Jena.

Другие инструменты

Более подробный список библиотек, фраемворков и прочих материалов можно найти по ссылке https://github.com/sszuev/awesome-semantic-web [24]

Заключение

OWL, RDF и связанные стандарты и технологии предоставляют мощные возможности для моделирования данных, создания онтологий и работы с семантическими графами.
Благодаря этим технологиям можно создавать интеллектуальные системы, которые понимают и интерпретируют данные. И хотя семантический веб не стал стандартом для веб, как это задумывалось в самом начале, он нашел свое применения в различных областях, таких как биомедицина, энергетика, интернет вещей и многое другое.


disclaimers:

  • (*) автор является майнтейнером модуля jena-ontapi

  • (**) автор является майнтейнером библиотеки owlcsont-api

Автор: sszz

Источник [25]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/semantic-web/402065

Ссылки в тексте:

[1] RDF: https://www.w3.org/TR/rdf11-concepts/

[2] RDF: https://en.wikipedia.org/wiki/Resource_Description_Framework

[3] OWL: https://www.w3.org/TR/owl2-overview/

[4] Онтология: https://en.wikipedia.org/wiki/Ontology_(information_science)

[5] FOAF: http://xmlns.com/foaf/spec/

[6] полная спецификация: https://www.w3.org/TR/owl2-syntax/

[7] EL, QL, RL: https://www.w3.org/TR/owl2-profiles/

[8] HermiT: https://github.com/owlcs/hermit-reasoner

[9] Pellet: https://github.com/stardog-union/pellet

[10] Fact++: https://github.com/owlcs/jfact

[11] openllet: https://github.com/Galigator/openllet

[12] SPARQL: https://www.w3.org/TR/sparql11-query/

[13] SHACL: https://www.w3.org/TR/shacl/

[14] Apache Jena: https://github.com/apache/jena

[15] IRI: https://www.ietf.org/rfc/rfc3987.txt

[16] OWLAPI: https://github.com/owlcs/owlapi

[17] ONTAPI: https://github.com/owlcs/ont-api

[18] RDF4J: https://github.com/eclipse-rdf4j/rdf4j

[19] Owlready2: https://github.com/pwin/owlready2

[20] Stardog: https://github.com/stardog-union/stardog-examples

[21] GraphDB: https://graphdb.ontotext.com

[22] Protégé: https://github.com/protegeproject/protege

[23] TopBraid Composer: https://topbraidcomposer.org/html/What_is_TopBraid_Composer.htm

[24] https://github.com/sszuev/awesome-semantic-web: https://github.com/sszuev/awesome-semantic-web

[25] Источник: https://habr.com/ru/articles/857652/?utm_source=habrahabr&utm_medium=rss&utm_campaign=857652