2015-03-08 4 views
2

вот мои правила DTD должны иметь следующее свойство: книга имеет название, год выпуска, автора или одного, одного или нескольких оценок (0-5), любое количество отзывов.Примеры DTD и XML

<!ELEMENT books (book+)> 
<!ELEMENT book (title, author+,year,rating+,review*)> 
<!ELEMENT title (#PCDATA)> 
<!ELEMENT author (#PCDATA)> 
<!ELEMENT year (#PCDATA)> 
<!ELEMENT rating (0|1|2|3|4|5)> 
<!ELEMENT review (#PCDATA)> 

и вот мой пример XML:

<?xml version="1.0" standalone="no" ?> 
<!DOCTYPE books SYSTEM "books.dtd"> 
<books> 
    <book> 
     <title>book1</title> 
     <author>bob</author> 
     <year>2000</year> 
     <rating>2</rating> 
     <rating>3</rating> 
    </book> 
    <book> 
    <title>book2</title> 
    <author>alice</author> 
    <year>2001</year> 
    <rating>4</rating> 
    <rating>5</rating> 
    </book> 
    <book> 
    <title>book3</title> 
    <author>john</author> 
    <year>2002</year> 
    <rating>5</rating> 
    <rating>0</rating> 
    <review>not bad</review> 
    </book> 
</books> 

, но я всегда получаю эту ошибку enter image description here.

ответ

3

<!ELEMENT rating (0|1|2|3|4|5)> неверен в DTD и в отношении вашего XML. Это означает, что вы хотите, чтобы элемент рейтинга содержал либо элемент с именем «0» (<0>), либо «1», «2» и так далее. К сожалению, имя тега не может начинаться с числа.

Для достижения того, что вы хотите сделать, обычно делается с атрибутом. Объявите рейтинг элемент как пустые, с атрибутом должны быть выбраны из значения в списке следующим образом:

<!ELEMENT rating EMPTY> 
<!ATTLIST rating 
      rank (0|1|2|3|4|5) #REQUIRED > 

и ваш экземпляр XML будет:

<?xml version="1.0" standalone="no" ?> 
<!DOCTYPE books SYSTEM "books.dtd"> 
<books> 
    <book> 
     <title>book1</title> 
     <author>bob</author> 
     <year>2000</year> 
     <rating rank="2" /> 
     <rating rank="3" /> 
    </book> 
    <book> 
    <title>book2</title> 
    <author>alice</author> 
    <year>2001</year> 
    <rating rank="4" /> 
    <rating rank="5" /> 
    </book> 
    <book> 
    <title>book3</title> 
    <author>john</author> 
    <year>2002</year> 
    <rating rank="5 /> 
    <rating rank="0" /> 
    <review>not bad</review> 
    </book> 
</books> 

Если вы действительно хотите, рейтинг быть установленным как текстовое содержимое, невозможно ограничить его значение DTD, однако это возможно с помощью XML-схемы.