Корневой элемент DTD

#xml #root #dtd

#xml #корень #dtd

Вопрос:

Можно ли определить, какой элемент будет корневым элементом в DTD внутренне. Другими словами, можно ли определить корневой элемент, когда DTD находится в отдельном файле?

Комментарии:

1. Когда вы говорите «внутренне», вы имеете в виду в файле, который не включает DTD?

2. обычно вы записываете dtd в отдельный файл и перед тем, как записать xml-документ (другой файл), вы говорите <!DOCTYPE «root-element» «dtd-url»>. Мой вопрос: есть ли другой способ указать корневой элемент в файле dtd?

3. Почему вы хотите это сделать? Знание причины сделало бы этот вопрос более полезным для других, а также может помочь нам предложить другой способ добиться того же.

Ответ №1:

Корневой элемент определяется DOCTYPE объявлением. Корневым элементом может быть любой элемент DTD.

Например, в приведенном ниже DTD (test.dtd) book обычно будет корневым элементом:

 <!ELEMENT book (chapter )>
<!ELEMENT chapter (section )>
<!ELEMENT section EMPTY>
 

Однако, если мы используем section в doctype, section является ли корневой элемент:

 <!DOCTYPE section SYSTEM "test.dtd">
<section/>
 

Я использовал DOCTYPE объявления во внешнем DTD для прямого указания корневого элемента, но я не думаю, что это разрешено спецификацией. Что я сделал, так это сохранил DOCTYPE его во внешнем DTD и удалил DOCTYPE из XML-файла. Я смог связать DTD с файлом XML в командной строке программы, которую я использовал.