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.)