XML - внешний DTD: содержимое типа элемента должно соответствовать

Я новичок в XML и учусь! XML с XSD удобнее, чем DTD! Я сталкиваюсь с ошибкой, решающей расширение DTD.

Вопрос: у человека будут иждивенцы, и иждивенцы могут быть супругом и детьми или только супругом. Человек может иметь более 1 ребенка. Генерировать XML и DTD

Из этой схемы я могу написать DTD! с именемperson.dtd- внешний DTD, который будет связан с файлом XML.,

[person.dtd] [2] и XML as ., [person.xml][1]

Ошибка, с которой я сталкиваюсь, такова!

Ошибка: общедоступный идентификатор: пусто. Идентификатор системы: файл:/home/p11422/person_given.xml Номер строки: 11 Номер столбца: 12 Сообщение: содержимое элемента типа "супруг" должно совпадать "(имя-супруга,spouse_age)".

Кто-нибудь, пожалуйста, помогите мне избавиться от этой ошибки! это person.dtd ->

 <?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT person (name , age , address , dependents)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT dependents (spouse,children?)>
<!ELEMENT spouse (spouse_name , spouse_age)>
<!ELEMENT spouse_name (#PCDATA)>
<!ELEMENT spouse_age (#PCDATA)>
<!ELEMENT children (child+)>
<!ELEMENT child (cname , gender , cage)>
<!ELEMENT cname (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ELEMENT cage (#PCDATA)>

это person.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person SYSTEM "person.dtd">
<person>
   <name>Deepak</name>
   <age>28</age>
   <address>Vijayawada</address>
   <dependents>
     <spouse>
         <spouse_name>padma</spouse_name>
         <spouse_age>26</spouse_age>
     </spouse>
    </dependents>
</person>

2 ответа

Совет для профессионалов: гораздо легче помочь отладить проблему, если вы поместите в вопрос реальный код, а не только изображения.

Поскольку я разговариваю по телефону и не могу легко воспроизвести проблему, я сделаю правильное предположение.

Я считаю, что проблема в том, что модель контента для dependents элемент недетерминирован. Другими словами, это неоднозначно; парсер не может определить какой spouse подбирается, не заглядывая в будущее.

Попробуйте изменить объявление от:

<!ELEMENT dependents (spouse|(spouse,children))>

чтобы:

<!ELEMENT dependents (spouse,children?)>

Это означает ровно один spouse с последующим нулем или единицей children,

Это не похоже на ошибку, которую вы получаете, но это единственное, что я вижу неправильно. Объявление / использование spouse кажется, все в порядке.

По-видимому, ввод, считываемый валидатором, не является вводом, который вы считаете. Показанный вами ввод действителен для показанного вами DTD, и ни xmllint, ни RXP не выдают никаких сообщений об ошибках элемента 'spouse'. (Оба жалуются на блуждающий бланк в начале DTD.)

Другие вопросы по тегам