DTD. Модель контента не является детерменистской

Мне нужен твой совет. Как описать одни и те же элементы в альтернативных вариантах. Например :

<!DOCTYPE offers [
<!ELEMENT offers (offer+)>
<!ELEMENT offer ((name, cost) | (id?, name, tag, desc?) | (prefix, title, desc?))>
<!ELEMENT name (#PCDATA)>
<!ELEMENT cost (#PCDATA)>
<!ELEMENT tag (#PCDATA)>
<!ELEMENT desc (#PCDATA)>
<!ELEMENT prefix (#PCDATA)>
<!ELEMENT title (#PCDATA)>
] >

<offers>
    <offer>
        <name>Name1</name>
        <cost>123</cost>
    </offer> 
    <offer>
        <id>123</id>
        <name>Name2</name>
        <tag>sale</tag>
        <desc>Some Description</desc>
    </offer>
    <offer>
        <prefix>Book</prefix>
        <title>Little Pony</title>
    </offer>    
</offers>

Имя тега повторяется в двух вариантах, как решить эту проблему при описании элементов в dtd. Спасибо за помощь


person user3451579    schedule 16.05.2015    source источник


Ответы (1)


Я думаю, что эта модель контента будет наиболее близка к вашим потребностям:

<!ELEMENT offer ((id?, name, (cost | (tag, desc?))) | (prefix, title, desc?)) >

Однако при этом вам также будет разрешено вставлять <id> перед моделью содержимого с <name> и <cost>, чего не было в исходном DTD, но я не понимаю, как это возможно получить именно то, что вы хотите.

PS: вам также необходимо объявить элемент id в вашем DTD <!ELEMENT id (#PCDATA)>

PS 2: ваш исходный документ правильно анализируется с помощью Xerces.

person potame    schedule 16.05.2015
comment
@ user3451579, если это решило вашу проблему, примите ответ. Спасибо - person potame; 29.05.2015