# [Шаблоны проектирования онтологий (ODP)](http://ontologydesignpatterns.org/wiki/OPTypes)
[TOC]
## Типизация шаблонов
[На сайте](http://ontologydesignpatterns.org/wiki/Main_Page) были идентифицированы несколько типов шаблонов онтодизайна (Ontology Design Patterns - ODP) и сгруппированы в шесть семейств:
1. Структурные ODP
1.1 [Логические ODP](http://ontologydesignpatterns.org/wiki/Category:LogicalOP)
1.2 [Архитектурные ODP](http://ontologydesignpatterns.org/wiki/Category:ArchitecturalOP)
2. Отображающие ODP
2.1 [Шаблоны трансформации концептуальных областей в онтологии](http://ontologydesignpatterns.org/wiki/Category:ReengineeringOP)
2.2 [Шаблоны выделения соответствий между онтологиями](http://ontologydesignpatterns.org/wiki/Category:AlignmentOP)
3. [Шаблоны контента (CP)](http://ontologydesignpatterns.org/wiki/Category:ContentOP)
4. Шаблоны онтологических выводов и онтологической нормализации (классификации, обобщения, наследования, материализации, деанонимизации и т.д.)
5. Презентационные ODP
* Шаблоны именования
* Шаблоны аннотаций
6. [Лексико-синтаксические ODP](http://ontologydesignpatterns.org/wiki/Category:LexicoSyntacticOP)

## 1.1 [Логические ODP](http://ontologydesignpatterns.org/wiki/Category:LogicalOP)
Логические шаблоны (Logical Patterns - *LP*) имеют следующие характеристики:
1. *LP* должны выражаться только в логических терминах, поскольку их сигнатура (множество имен, предикатов, например, множество классов и свойств в онтологии OWL) пуста (с небольшими исключениями, например, включением по умолчанию класса owl:Thing).
2. С одной стороны, *LP* не должны зависить от конкретной предметной области (от конкретного содержания предметной области), с другой стороны, они зависят от выразительности логического формализма, используемого для представления. Другими словами, *LP* помогают решать проблемы проектирования, когда примитивы языка представления напрямую не поддерживают определенные логические конструкции. Например, если языком представления является OWL, использующего только примитивы класса и бинарного отношения, и разработчику необходимо представить отношение между более чем двумя элементами, тогда *LP* необходимы, чтобы выразить семантику n-арного отношения.
3. *LP* могут быть двух типов: логические макросы и шаблоны преобразования. Шаблоны преобразования переводят логическое выражение с одного логического языка на другой. Семантика первого аппроксимируется, чтобы найти компромисс между требованиями и выразительностью. Примером могут служить n-арные отношения, которые нельзя напрямую выразить в OWL. Аппроксимация n-арного отношения в OWL заключается в создании нового класса, представляющего отношение, и указании аргументов через свойства.
### Пример логического шаблона [<Контекстные Cрезы>](http://ontologydesignpatterns.org/wiki/Submissions:Context_Slices)
```OWL=
Ontology(<http://example.org/ContextSlices>
Annotation(owl:versionInfo "1.0"@en)
Annotation(rdfs:label "Context slices ontology logical pattern"@en)
Declaration(Class(cs:Context))
Declaration(Class(cs:ContextualProjection))
DisjointClasses(cs:Context cs:ContextualProjection)
DisjointClasses(cs:ContextualProjection cs:Context)
SubClassOf(cs:ContextualProjection ObjectAllValuesFrom(cs:hasContext cs:Context))
SubClassOf(cs:ContextualProjection ObjectExactCardinality(1 cs:hasContext))
SubClassOf(cs:ContextualProjection ObjectExactCardinality(1 cs:projectionOf))
Declaration(ObjectProperty(cs:contextualProperty))
ObjectPropertyDomain(cs:contextualProperty cs:ContextualProjection)
ObjectPropertyRange(cs:contextualProperty cs:ContextualProjection)
Declaration(ObjectProperty(cs:hasContext))
FunctionalObjectProperty(cs:hasContext)
ObjectPropertyDomain(cs:hasContext cs:ContextualProjection)
Declaration(ObjectProperty(cs:projectionOf))
FunctionalObjectProperty(cs:projectionOf)
ObjectPropertyDomain(cs:projectionOf cs:ContextualProjection)
)
```
## 3. [Шаблоны контента](http://ontologydesignpatterns.org/wiki/Category:ContentOP)
Шаблоны контента (Content Patterns - *CP*) имеют следующие характеристики:
1. *CP* кодируют концептуальные, а не логические cхемы. Другими словами, в то время как логические шаблоны (Logical Patterns - *LP*) помогают решать общие задачи онтологического проектирования, независимые от прикладной концептуализации, *CP* предлагают шаблоны для решения проблем проектирования для онтологических классов предметной области и свойств, тем самым решая проблемы описания содержания.
2. *CP* — это приземление *LP* (или композиций *LP* ) с непустой сигнатурой. *CP* имеют свои явные тезаурусы для конкретной предметной области, не пересекающийся со словарями *LP* (т. е. они зависят от содержания).
3. *CP* предлагают варианты решения проблем моделирования предметной области и влияют только на конкретную область онтологии. Обычно они используются в модифицированном виде после их *специализации*, *расширения* и применения *композиции*.
4. В принципе, *CP* не зависят от какого-либо конкретного формального языка представления. Однако, для повторного использования в качестве строительных блоков, их необходимо каким-то образом реализовать. Мы в основном имеем дело с *CP* в контексте семантической сети, поэтому в настоящее время поддерживается OWL в качестве эталонного формализма для представления *CP*.
5. Характеристики *CP*:
1) вычислимые;
2) небольшие по объему;
3) автономные;
4) иерархические;
5) ментально релевантные;
6) лингвистически релевантные;
7) отражают лучшие практики применения.
### Смотри также
1. [Предлагаемые *CP*](http://ontologydesignpatterns.org/wiki/Category:ProposedContentOP) присылаются пользователями шаблонов и перечислены в списке предложений.
2. Набору [оценочных принципов](http://ontologydesignpatterns.org/wiki/Odp:EvaluationPrinciples) должны соответствовать Сертифицированные *CP* (*на данный момент список сертифицированных шаблонов пуст*)