DITA DTD, разрешить один и тот же элемент друг за другом - PullRequest
1 голос
/ 08 марта 2019

Я добавляю некоторые элементы в наш DITA DTD (настройка DTD на основе dita 1.2)

То, что я хочу, это разрешить р-элемент более одного раза друг за другом внутри одного и того же элемента сущности, но не более четырех раз.

Пользователи должны иметь один P-элемент и не более 4, внутри элемента textcont.

При использовании DTD ниже я получаю:

sect.mod: недетерминированная модель контента. Экземпляр элемента p может одновременно соответствовать двум или более токенам в модели содержимого.

<!ENTITY % textcont.content
  "(%p;,
  %p;?,
  %p;?,
  %p;?)
">

Есть ли способ написать это, чтобы я не получил ошибку - на основе минимального 1 p-элемента, максимум 4 p-элемента?

или я должен использовать

<!ENTITY % textcont.content
  "(%p;,(%p;)*)">

Может быть, это ограничение для создания DTD, относительно этого?

1 Ответ

1 голос
/ 11 марта 2019

Короткий ответ: получить синтаксис DTD непросто.

Чтобы ограничить повторение определенным числом, вы должны сделать что-то вроде этого:

<!ELEMENT root 
   (p, 
     (p, 
       (p,
         (p)?)?)?)
>

<!ELEMENT p EMPTY >

Это работает для вашего конкретного случая, но вы можете видеть, что если ваши требования усложняются, они начинают не работать.

В общем, такого рода ограничения лучше выполнять с помощью Schematrons, что облегчает проверку этих видов ограничений.

...