2013-05-10 3 views
1

Привет, ребята, у меня есть XML-код DTD, который является внешним, но когда я пытаюсь его проверить, я, кажется, получаю сообщение об ошибке. Код у меня есть ниже:XML-проверка DTD-элементов

<!DOCTYPE catalog [ 
    <!ELEMENT catalog (book)+> 
    <!ELEMENT book (title, authors, year_published, ISBN, number_of_pages, price) > 
    <!ELEMENT title (#PCDATA)> 
    <!ELEMENT authors (author)> 
    <!ELEMENT author (first_name, last_name, gender)> 
     <!ELEMENT first_name (#PCDATA)> 
     <!ELEMENT last_name (#PCDATA)> 
     <!ELEMENT gender (#PCDATA)> 
    <!ELEMENT year_pusblished (#PCDATA)> 
    <!ELEMENT ISBN (#PCDATA)> 
    <!ELEMENT number_of_pages (#PCDATA)> 
    <!ELEMENT price (discount)> 
     <!ATTLIST price discount (yes|no) "no">]> 

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

«заявления Разметки, содержащихся в или указан по декларации типа документа должен быть хорошо Строка 3 Столбец 4 "

Я проверил все, но я не могу заставить его работать. Вы, ребята, можете помочь?

+0

Хороший вопрос. В «year_pusblished» есть опечатка, но это не то, что вызывает ошибку. http://validator.w3.org/check, похоже, говорит, что это DTD в порядке. Вы получаете ошибку от Xerces? Может быть, у него есть ошибка? – LarsH

+0

Это не имеет никакого отношения к HTML; это чисто проверка XML. –

+2

Возможный дубликат [Помощь элементам DTD] (http://stackoverflow.com/questions/16473171/dtd-element-assistance) – mzjn

ответ

0

Вы, кажется, использовали инструмент http://www.validome.org/xml/validate/, который выдает точное сообщение об ошибке в вашем вопросе и не особенно полезно другим способом. Как правило, качество бесплатных валидаторов XML ... меняется. Лучшим инструментом является http://xmlvalidator.new-studio.org.

Если вы добавляете следующий простой XML-элемент и проверить с помощью лучшего инструмента, вы получите более полное представление о проблемах:

<catalog> 
<book> 
<title></title> 
<authors> 
<author> 
<first_name></first_name> 
<last_name></last_name> 
<gender></gender> 
</author> 
</authors> 
<year_published></year_published> 
<ISBN></ISBN> 
<number_of_pages></number_of_pages> 
<price></price> 
</book> 
</catalog> 

Вы получаете следующие сообщения об ошибках:

Line 25 Колонка 17 : Должен быть объявлен тип элемента «year_published».

Линия 28 Колонка 16: Содержание типа элемента «цена» является неполным, оно должно соответствовать «(скидка)».

Первая ошибка проста: просто исправьте написание year_pusblished (удалив первый s) в объявлении элемента.

Второй вариант менее очевиден, но прост: вы объявили элемент price с (discount) в качестве модели контента. Это означало бы, что элемент price должен содержать элемент discount и ничего больше, и это не имеет никакого смысла (хотя это возможно, формально говоря, но тогда вам нужно будет объявить элемент discount). Вы, вероятно, хотите, чтобы только символьные данные, как содержание (применимость скидки указан в discountатрибута):

<!ELEMENT price (#PCDATA)>