Dream Bot Site ng.app.converter ng.content.article

ng.content.annotation

Андрей Орлов  2008-01-12 02:26

ng.content.annotation - продукт, предназначенный для модификации других объектов добавлением к ним аннотаций. Продукт содержит типовую библиотеку аннотаций (словарь, событие, продукт, персона) и переключатель аннотаций, позволяющий выбрать интересующие аннотации для объекта.

Продукт

Название:
ng.content.annotation
Выложен на PyPI
Репозиторий
Краткое описание пакета ng.content.annotation

Краткое описание пакета 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. Аннотация включает в себя следующие поля:

email
Адрес электронной почты;
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>

Расширение списка аннотаций

Список аннотаций легко может быть расширен при соблюдении двух условий:

  1. Продукт с новой аннотацией сделан в соответствии с рекомендациями статьи Аннотации.txt (продукт ng.content.annotation является хорошей иллюстрацией к этой статье);

  2. Интерфейс активации аннотации привязан к интерфейсу IAnnotationSwitcher декларацией следующего вида:

    class IAnnotationSwitcherDict(IAnnotationSwitcher,IDictAnnotationAble) :
        """Use as dictionary """
    

    и явно зарегистрирован как интерфейс:

    <interface
      interface=".interfaces.IAnnotationSwitcherDict"
      />
    

    Тогда он автоматически включится в меню управления аннотациями.

Заключение

Хотя ng.content.annotation написан с исключительным прицелом на использование с ng.content.article, использованная технология модуляризации позволяет легко объеденить его с любым продуктом при минимальных трудозатратах. Возможность расширения списка аннотаций является дополнительным качеством, обеспечивающим живучесть продуктов на его основе.

Более удобного редактирования можно достичь используя формы, основанные на продукте ng.zcmlmultiform: в этом случае поля всех форм будут открываться на одной странице.

Вложено:

Новое в ng.content.annotation 2009-06-30 13:25 Степан Ломов 
Эпицентр Zope3 Учат тут Нейросети Репозиторий Статистика Редакторам Проекты
Подписаться на RSS Feed Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml