- 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 [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 [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 [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 [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
.
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 [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 [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 [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 [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 [21] – триплстор от Ontotext, предназначенный для хранения и управления RDF данными. Он поддерживает SPARQL и интеграцию с различными инструментами для аналитики и визуализации.
Protégé [22] – это популярный инструмент, десктопное приложение, для создания и редактирования OWL-онтологий. Он предоставляет визуальный интерфейс для работы с классами, свойствами и аксиомами, а также поддерживает плагины для расширенной функциональности. Под капотом Protégé использует OWLAPI.
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
Нажмите здесь для печати.