ng.content.annotation
2008-01-12 02:26ng.content.annotation - продукт, предназначенный для модификации других объектов добавлением к ним аннотаций. Продукт содержит типовую библиотеку аннотаций (словарь, событие, продукт, персона) и переключатель аннотаций, позволяющий выбрать интересующие аннотации для объекта.
Продукт
| Название: | |
| ng.content.annotation | |
| Выложен на PyPI | |
| Репозиторий |
Краткое описание пакета ng.content.annotation
Пакет предоставляет коллекцию контент-аннотаций, позволяющих снабжать текстовые материалы, публикуемые с использованием пакета ng.content.article, дополнительными описаниями, в формате "название - значение", зависящими от той роли, которую играет статья на сайте. В настоящее время реализованы аннотации для словарной статьи, события и продукта.
Список аннотаций
- dict
Аннотация "словарная статья" предназначена для статей, используемых под описания определений словаря. Использование аннотации включается для компонентов с интерфейсом IDictAnnotationAble. Аннотация предоставляет следующие поля:
- keyword: Tuple of TextLine
- Список ключевых слов, связанных с данной статьей;
- area : TextLine from Choice
- Тематическая область, которой принадлежит данный термин, хотя по смыслу поле аналогично т.н. "тегу", в настоящий момент оно используется в рамках эксперимента по полуавтоматическому тегированию;
- wikiword: TextLine
- Слово, используемое для поиска значения слова на wikipedia, самом большом, на сегодняшний день, толковом словаре в Интернет;
- gender: TextLine from Choice
- Пол словарной статьи, в настоящее время жестко прошит и может быть 'Male','Middle' или 'Female', что используется при разрешении споров о правилах написания некоторых терминов на русском языке;
- suffixes: TextLine
- Суффиксы (родительного падежа), используется при разрешении споров о правилах написания некоторых терминов на русском языке;
- event
Аннотация "событие" используется для анонсирования будущих событий. Использование аннотации включается для компонентов с интерфейсом IEventAnnotationAble. Аннотация предоставляет следующие поля:
- data : DateTime
- Дата и время начала события
- durablility : TextLine
- Продолжительность события
- place : Text
- Место проведения события
- product
Аннотация "продукт" используется для описания продуктов на нашем сайте. Использование аннотации включается для компонентов с интерфейсом IProductAnnotationAble. Аннотация включает в себя следующие поля:
- title : TextLine
- Точное название продукта (такое, которое используется при поиске пакетов, например на PyPI);
- ispypi : Bool
- Если это флаг установлен, то продукт размещен на PyPI;
- repository : URI
- Репозиторий продукта, ссылка может быть пустой;
- archive : URI
- Архив, откуда можно скачать пакет с продуктом, обычно пустая ссылка;
- docshort
- Аннотация "краткое описание документа" используется для облегчения интеграции продуктов со стандартами иерархии ng. Поля аннотации аналогичны описанным в ng.content.article.txt для IDocShort.
- profile
Аннотация "профиль пользователя" позволяет использовать статью или раздел в качестве профиля пользователя :), она хранит информацию о пользователе, имеющим аккаунт на сайте. Использование аннотации включается для компонентов с интерфейсом IProfileAnnotationAble. Аннотация включает в себя следующие поля:
- Адрес электронной почты;
- nickname
- Ник;
- interest
- Область интересов, выбирается из списка, может быть выбрано несколько областей интересов;
- city
- Город, в котором находится пользователь;
- birthday
- Дата рождения;
- sex
- Выбор одного из вариантов;
- friendship
- Позволяет поддерживать отношения "дружбы" между профилями пользователей (или другими аналогичными объектами, в принципе это не важно).
- friendobjectqueue
- Позволяет вести ленту сообщений друзей, список которых определеятся аннотацией friendship.
Интеграция аннотаций с другими продуктами
Ассоциирование с аннотациями выполнено по технологии, описанной в статьях Аннотации.txt и Адаптация как способ ассоциации компонент.txt, поэтому для ассоциации каждой из перечисленных аннотаций с другим компонентом достаточно того, чтобы этот компонент адаптировался к IAnnotations и предоставлял интерфейс, "включающий" использование соответствующей аннотации (приведен в списке видов аннотаций выше). Возможно динамическое переключение интерфейсов и активация соответствующих аннотаций. При этом у компонента появляются новые вкладки, соответствующие активированным аннотациям. Динамическое переключение выполняется вложенным продуктом ng.content.annotation.annotationswitcher, для активации которого достаточно декларировать то, что класс реализует интерфейс IAnnotationSwitcher (и интерфейс IAttributeAnnotatable или аналогичный) и указать права доступа к ним:
<class class="ng.content.remotearticle.remotearticle.remotearticle.RemoteArticle">
<implements
interface="ng.content.annotation.annotationswitcher.interfaces.IAnnotationSwitcher"
/>
<implements
interface="zope.annotation.interfaces.IAttributeAnnotatable"
/>
<require
interface="ng.content.annotation.annotationswitcher.interfaces.IAnnotationSwitcher"
permission="zope.View"
/>
<require
set_schema="ng.content.annotation.annotationswitcher.interfaces.IAnnotationSwitcher"
permission="zope.ManageContent"
/>
</class>
Расширение списка аннотаций
Список аннотаций легко может быть расширен при соблюдении двух условий:
Продукт с новой аннотацией сделан в соответствии с рекомендациями статьи Аннотации.txt (продукт ng.content.annotation является хорошей иллюстрацией к этой статье);
Интерфейс активации аннотации привязан к интерфейсу IAnnotationSwitcher декларацией следующего вида:
class IAnnotationSwitcherDict(IAnnotationSwitcher,IDictAnnotationAble) : """Use as dictionary """и явно зарегистрирован как интерфейс:
<interface interface=".interfaces.IAnnotationSwitcherDict" />Тогда он автоматически включится в меню управления аннотациями.
Заключение
Хотя ng.content.annotation написан с исключительным прицелом на использование с ng.content.article, использованная технология модуляризации позволяет легко объеденить его с любым продуктом при минимальных трудозатратах. Возможность расширения списка аннотаций является дополнительным качеством, обеспечивающим живучесть продуктов на его основе.
Более удобного редактирования можно достичь используя формы, основанные на продукте ng.zcmlmultiform: в этом случае поля всех форм будут открываться на одной странице.


