На выставке CeBIT я познакомился с представителями польской компании Cognitum, которая разрабатывает семантический фреймворк Ontorion. Важнейшей частью этого фреймворка является редактор онтологий Fluent Editor, который показался мне замечательным и достойным обзора. Главное достоинство Fluent Editor'а состоит в том, что он позволяет создавать OWL-онтологии людям, не имеющим представления о синтаксисе OWL (хотя иметь представление о его концепциях, и о моделировании информационных структур, конечно, все равно нужно). Онтологии создаются на естественном языке, Controlled English — то есть на обычном английском, к которому применены определенные правила и ограничения. Приведу обзор основных возможностей синтаксиса этого языка, не забывая смотреть на то, в каком виде его основные выражения будут сохраняться в OWL.
Для примера начнем составлять онтологию, содержащую сведения о бизнесе некой компании. У этой компании, как у любой коммерческой организации, есть поставщики и покупатели. Те и другие являются организациями, причем одна и та же организация может быть одновременно и поставщиком, и покупателем. Запишем соответствующие выражения на Controlled English:
Every customer is a organization.
Every supplier is a organization.
Ключевые слова редактор Fluent Editor подсвечивает синим, а я выделяю жирностью. В процессе ввода редактор дает подсказки, и предупреждает о грамматически некорректных выражениях.
Обратите внимание, что нам не требуется явно объявлять тот факт, что организация, поставщик и покупатель являются классами: редактор сам догадается об этом из контекста. Классы готовы, теперь можно объявить индивидуальные сущности:
Alpha is a customer.
Alpha is a supplier.
Beta is a customer.
Редактор разберется в том, что Альфа и Бета — индивидуальные сущности, относящиеся к классам «поставщики» и «покупатели».
Если теперь сохранить онтологию в файл OWL, получится следующее:
<SubClassOf>
<Class IRI="Customer" />
<Class IRI="Organization" />
</SubClassOf>
<SubClassOf>
<Class IRI="Supplier" />
<Class IRI="Organization" />
</SubClassOf>
<ClassAssertion>
<Class IRI="Customer" />
<NamedIndividual IRI="Alpha" />
</ClassAssertion>
<ClassAssertion>
<Class IRI="Supplier" />
<NamedIndividual IRI="Alpha" />
</ClassAssertion>
<ClassAssertion>
<Class IRI="Customer" />
<NamedIndividual IRI="Beta" />
</ClassAssertion>
Поставщики поставляют нашей компании материалы и запчасти, а покупатели приобретают нашу продукцию. Определим соответствующие классы:
Every replaceable-part is a product.
Every supplier supplies at-least one product.
Every customer buys at-least one product.
Как мы видим, нам удалось определить роли «поставщик» и «покупатель» в зависимости от того, что они делают с товарами и запчастями. В OWL вторая строка из приведенного кода отразится таким образом:
<SubClassOf>
<Class IRI="Supplier" />
<ObjectMinCardinality cardinality="1">
<ObjectProperty IRI="supplies" />
<Class IRI="Product" />
</ObjectMinCardinality>
</SubClassOf>
Определим теперь конкретный продукт и запчасть, и расскажем о том, как строятся наши материальные отношения с контрагентами:
Oil is a product.
Beta buys oil.
Pump is a replaceable-part.
Alpha supplies pump.
Чтобы мы не запутались в написанном, Fluent Editor показывает нам дерево таксономии:
Обратите внимание, что редактор сам переводит глаголы в разные формы. В тексте мы писали supplies, а в дереве таксономии соответствующий термин называется supply. С неправильными глаголами он тоже дружит.
Синтаксис Controlled English позволяет нам определять различные ограничения и взаимосвязи между классами:
Every-single-thing that is a replaceable-part is supplied by at-least one supplier.
Something is a supplier if-and-only-if-it supplies nothing-but replaceable-parts and is a organization.
Something is a customer if-and-only-if-it buys nothing-but products and is a organization.
Пришло время добавить атрибуты. У организаций есть названия, ИНН и тому подобные свойства. Определим два атрибута, и укажем их значения для организации «Альфа». Значения, конечно, будут литералами.
Every organization has-name nothing-but (some-string-value).
Every organization has-tax-number nothing-but (some-integer-value).
Alpha has-name equal-to 'Alpha, LLC'.
Alpha has-tax-number equal-to 6671123456.
В OWL эти фразы преобразуются примерно так:
<SubClassOf>
<Class IRI="Organization" />
<DataAllValuesFrom>
<DataProperty IRI="hasName" />
<Datatype abbreviatedIRI="xsd:string" />
</DataAllValuesFrom>
</SubClassOf>
<ClassAssertion>
<DataSomeValuesFrom>
<DataProperty IRI="hasName" />
<DataOneOf>
<Literal datatypeIRI="http://www.w3.org/2001/XMLSchema#string">Alpha, LLC</Literal>
</DataOneOf>
</DataSomeValuesFrom>
<NamedIndividual IRI="Alpha" />
</ClassAssertion>
Конечно, этим возможности синтаксиса Controlled English не ограничиваются, но нашей задачей был только короткий обзор достоинств редактора; полное описание синтаксиса можно найти в документации на редактор.
В редактор встроен Hermit, которому мы можем «задавать вопросы» на тему информации, содержащейся в нашей онтологии. Например, в данном примере мы можем узнать, чем является объект Alpha:
is Alpha ?
Hermit ответит: Alpha is a customer, supplier, organization.
Не менее интересны возможности остальных компонентов фреймворка Ontorion, но они выходят за рамки нашего обзора.
Главное состоит в том, что мы получили замечательный и общедоступный инструмент создания онтологий, намного более подходящий для людей, не являющихся профессионалами в ИТ, чем TopBraid Composer или Protege. А ведь на практике сведениями о терминах, которые должны входить в онтологию, обладают именно такие люди — профессионалы в области управления, производства, но никак не информационных технологий.
Автор: SergeIndex