недетерминированная c ошибка модели содержимого DTD - PullRequest
0 голосов
/ 27 февраля 2020

Учитывая:

<!ELEMENT diagnostic-tracks (hookup*, (%step;)*, ((diagnostic-track-automated, diagnostic-track-manual) | diagnostic-track-automated | diagnostic-track-manual), evaluate*, disconnect*)>

и

<!ELEMENT diagnostic-track-automated (((%step;) | diagnostic_group)*, diagnostic_group, evaluate*)>

<!ENTITY % step "((%figtab;) | step1 | step1-alt)">
<!ENTITY % figtab "figure | figure-alt | table | table-alt | lubetab">

Я получаю недетерминированные c ошибки модели содержимого, которые могут одновременно совпадать с диагностикой c -track-automatic и Diagnost_group. два или более токенов.

Я изменил на:

<!ELEMENT diagnostic-tracks (hookup*, (%step;)*, diagnostic-track-automated?, diagnostic-track-manual?, evaluate*, disconnect*)>

и

<!ELEMENT diagnostic-track-automated (((%step;) | diagnostic_group+)*, evaluate*)>

, которые устранили сообщения об ошибках, но я не думаю, что мои изменения, особенно для diagnostic-track-automated, верны.

Я ценю любые предложения по улучшению.

1 Ответ

1 голос
/ 28 февраля 2020

Я думаю, что то, что вы придумали для diagnostic-tracks, похоже, то, что вы пытались достичь sh с исходной недетерминированной c моделью:

ноль или более hookup элементов, за которыми следуют ноль или более элементов из %step; с последующим ноль или один diagnostic-track-automated элемент, за которым следует ноль или один элемент diagnostic-track-manual, за которым следует ноль или более disconnect элементов

Однако я думаю, что исправление для diagnostic-track-automated совсем не то, что вы изначально предполагали.

Теперь вы предлагаете:

ноль или более элементов из %step; или diagnostic_group, за которыми следует ноль или более evaluate элементов

Я думаю, вы имели в виду:

ноль или более элементов из %step;, за которыми следует один или несколько diagnostic_group элементов, за которыми следует ноль или более evaluate элементов

Что будет:

<!ELEMENT diagnostic-track-automated ((%step;)*, diagnostic_group+, evaluate*)>

Вот полный / тестируемый пример ...

DTD (so.dtd)

<!ENTITY % figtab "figure | figure-alt | table | table-alt | lubetab">
<!ENTITY % step "%figtab; | step1 | step1-alt">

<!ELEMENT diagnostic-tracks (hookup*, (%step;)*, diagnostic-track-automated?, diagnostic-track-manual?, evaluate*, disconnect*)>

<!ELEMENT diagnostic-track-automated ((%step;)*, diagnostic_group+, evaluate*)>

<!ELEMENT table EMPTY>
<!ELEMENT table-alt EMPTY>
<!ELEMENT diagnostic_group EMPTY>
<!ELEMENT step1-alt EMPTY>
<!ELEMENT evaluate EMPTY>
<!ELEMENT figure EMPTY>
<!ELEMENT figure-alt EMPTY>
<!ELEMENT lubetab EMPTY>
<!ELEMENT step1 EMPTY>
<!ELEMENT diagnostic-track-manual EMPTY>
<!ELEMENT disconnect EMPTY>
<!ELEMENT hookup EMPTY>

XML

<!DOCTYPE diagnostic-tracks SYSTEM "so.dtd">
<diagnostic-tracks>
    <diagnostic-track-automated>
        <diagnostic_group/>
    </diagnostic-track-automated>
    <diagnostic-track-manual/>
</diagnostic-tracks>
...