Как использовать одно и то же имя элемента для разных целей (в XML и DTD)? - PullRequest
8 голосов
/ 30 мая 2010

Я хочу создать схему DTD для этого XML-документа:

<root>

    <student>
        <name>
            <firstname>S1</firstname>
            <lastname>S2</lastname>
        </name>
    </student>

    <course>
        <name>CS101</name>
    </course>

</root>

Как видите, элемент name в course содержит простой текст, но элемент name в student имеет сложный тип (имя, фамилия). Ниже приводится DTD:

<!ELEMENT root (course|student)*>

<!ELEMENT student (name)>
<!ELEMENT name (lastname|firstname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>

<!ELEMENT course (name)>

Когда я хочу подтвердить это, я получаю ошибку, потому что name курса имеет структуру, отличную от name студента.

Мой вопрос:

  • как сделать обходное решение для этой ситуации без изменения имени элемента name, используя DTD, а не XML-схему.

Спасибо.

1 Ответ

10 голосов
/ 30 мая 2010

Извини! Это одно из главных ограничений DTD: у данного имени элемента всегда одна и та же модель содержимого.

Все, что вы можете сделать, это отказаться от полной проверки для этого конкретного элемента и разрешить все возможное содержимое:

<!ELEMENT name (#PCDATA|lastname|firstname)*>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...