2016-02-03 8 views
2

Я новичок в Дите, поэтому я прошу прощения за любое незнание.Почему схема Dita разделена на тему и карту?

Я использую XJC для компиляции базы (и только базы) схемы Dita 1.3 в классы Java. Когда я попытался скомпилировать все файлы XSD, я получил ошибки с переопределением элементов и групп. Ни одно из привязок XJC, которое я попытался написать, не исправит.

После обработки схемы я обнаружил, что mapGrp.xsd/mapMod.xsd и topicGrp.xsd/topicMod.xsd содержат те же определения групп и элементов. Это объясняет, почему XJC завершился с ошибкой при включении всех файлов XSD. Сам анализатор XSD не может обрабатывать эти повторяющиеся записи.

Поэтому я сгенерировал basemap.xsd и basetopic.xsd отдельно и очистил сгенерированный код, чтобы я мог запускать diff в отношении двух каталогов.

Я обнаружил, что две схемы имеют некоторые элементы, характерные для карт и тем. Например, схема карты имеет DitavalmetaClass и DvrKeyscopePrefixClass, а схема темы - нет. И схема темы содержит AbstractClass и BodyClass, а схема карты - нет. Но большинство классов разделяются между двумя схемами.

Что касается классов, которые являются общими, есть только три, которые имеют некоторые отличия между двумя схемами (LinktextClass, MetadataClass и SearchtitleClass). Даже тогда, они не большие изменения, просто некоторые различия в том, что они могут содержать.

Вопрос в том, почему общие классы не могут находиться под одной общей схемой Grp/Mod, которая разделена между темами и картами и переопределяет эти три класса? Могу ли я изменить две схемы, чтобы они делили одни и те же элементы и группы, не нарушая никаких других схем, расширяющих базовую схему?

ответ

1

Карты и темы представляют собой два разных типа документов. Они совместно используют некоторые типы элементов, но в остальном полностью независимые типы документов.

Обратите внимание также, что DITA не имеет «единой грамматики», как это делают другие приложения XML (или, как представляется, делают).

Дита явно спроектирована, чтобы позволить контролируемое расширение от базовых грамматик, так что вы можете сделать одно из следующих действий:

  • Настройка данной карты или темы типа, чтобы включить или исключить отдельные элементы, либо другие типы тем (в случае тем) или конкретных «доменов» элементов (наборов элементов «mix-in»). Таким образом, могут быть две разные рабочие грамматики для «тематических» документов, которые допускают разные наборы элементов.
  • Добавить модуль ограничения, который каким-либо образом ограничивает существующие модели контента или списки атрибутов (например, запрещает тип базового элемента в конкретном контексте).
  • Определите свой собственные типы нового элемента и атрибуты с помощью «специализации»

Таким образом, любой попытки генерировать такие вещи, как классы Java или схему базы данных для DITA в любом виде статического пути обречена на неудачу в общем случае.

Если вы реализуете код, который должен работать с любым соответствующим документом DITA, тогда он должен быть более гибким и работать с элементами с точки зрения их значений @class, а не их имен тегов.

Если вам разумно генерировать классы Java из XSD, вы должны рассматривать каждую карту и тип темы верхнего уровня (карта, букмарп, subjectScheme, learningMap, тема, концепция, задача, общая задача, ссылка, glossentry и т. д.) в качестве отдельной иерархии классов - вы не можете объединить их в одну иерархию, потому что они будут иметь разные правила модели контента для тех же типов элементов.

Вы обязательно должны прочитать спецификацию DITA Архитектуры:

http://docs.oasis-open.org/dita/v1.2/os/spec/architectural_specification.html#architectural_specification

Приветствие,

Элиот

1

XML-схемы DITA 1.3 не объединены вручную. Они генерируются автоматически из схем Relax NG, которые являются официально поддерживаемыми схемами по спецификации. Возможно, вы также должны взглянуть на XML-схемы DITA 1.2, они были написаны вручную, и они могут быть лучше смоделированы для повторного использования дополнительных определений элементов.

 Смежные вопросы

  • Нет связанных вопросов^_^