Я думаю, что то, что вы придумали для 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>