Как исправить эти ошибки XML? - PullRequest
0 голосов
/ 27 сентября 2019

Я учусь программировать на XML, и во время выполнения упражнения я столкнулся с ошибками, с которыми я не знаю, как справиться.Заранее спасибо за те, которые мне помогут.

filmographie.dtd

<!ELEMENT films (film)+>
<!ELEMENT film (titre, visa, nationalite, pays, genres, exploitation,       
realisateur, duree, acteurs, scenario)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT visa (#PCDATA)>
<!ELEMENT nationalite (#PCDATA)>
<!ELEMENT pays (nom)*>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT genres (genre)+>
<!ELEMENT genre (#PCDATA)>
<!ELEMENT exploitation (date_de_sortie, nombre_entrees, nombre_salles)>
<!ELEMENT date_de_sortie (#PCDATA)>
<!ELEMENT nombre_entrees (#PCDATA)>
<!ELEMENT nombre_salles (#PCDATA)>
<!ELEMENT realisateur (#PCDATA)>
<!ELEMENT duree (heures, minutes)>
<!ELEMENT heures (#PCDATA)>
<!ELEMENT minutes (#PCDATA)>
<!ELEMENT acteurs (acteur+)>
<!ELEMENT acteur (#PCDATA)>
<!ATTLIST heures unite CDATA 'h'>
<!ATTLIST minutes unite CDATA 'mn' >
<!ELEMENT scenario (#PCDATA) >

filmographie.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE filmographie SYSTEM "filmographie.dtd" >
<films>
    <film>
        <titre>King Kong</titre>
        <visa>114089</visa>
        <nationalite>Americain</nationalite>
        <pays>
            <nom>France</nom>
        </pays>
        <genres>
            <genre></genre>
        </genres>
        <exploitation>
            <date_de_sortie>2005_12_14</date_de_sortie>
            <nombre_entrees>2838759</nombre_entrees>
            <nombre_salles>547</nombre_salles>
        </exploitation>
        <realisateur>Peter Jackson</realisateur>
        <duree>
            <heures unite="h">3</heures>
            <minutes unite="mn">8</minutes>
        </duree>
        <acteurs> 
            <acteur>Peter Jackson</acteur>
            <acteur>Naomi Watts</acteur>
        </acteurs>
        <scenario></scenario>
    </film>
    <film>
        <titre>My Hero Academia</titre>
        <visa>568 789</visa>
        <nationalite>Japonais</nationalite>
        <pays>
            <nom>Japon</nom>
        </pays>
        <genres>
            <genre>Animation</genre>
            <genre>Action</genre>
            <genre>Comedie</genre>
        </genres>
        <exploitation>
            <date_de_sortie>2019_01_22</date_de_sortie>
            <nombre_entrees>1 896 754</nombre_entrees>
            <nombre_salles>148</nombre_salles>
        </exploitation>
        <realisateur>Kenji Nagasaki</realisateur>
        <duree>
            <heures unite="h">1</heures>
            <minutes unite="mn">35</minutes>
        </duree>
        <scenario></scenario>
    </film>
    <film>
        <titre>Le Dernier Maitre de l"air</titre>
        <visa>147 589</visa>
        <nationalite>Americain</nationalite>
        <pays>
            <nom>Amerique</nom>
            <nom>Japon</nom>
        </pays>
        <genres>
            <genre>Aventure</genre>
            <genre>Action</genre>
            <genre>Famille</genre>
            <genre>Fantastique</genre>
        </genres>
        <exploitation>
            <date_de_sortie>2010_08_28</date_de_sortie>
            <nombre_entrees>2 358 698</nombre_entrees>
            <nombre_salles>285</nombre_salles>
        </exploitation>
        <realisateur>Night Shyamalan</realisateur>
        <duree>
            <heures unite="h">1</heures>
            <minutes unite="mn">43</minutes>
        </duree>
        <acteurs> 
            <acteur>Noah Ringer</acteur>
            <acteur>Nicola Peltz</acteur>
        </acteurs>
        <scenario></scenario>
    </film>    
</films>       

Вот ошибки, которые я получил:

Корневой элемент документа "film", должен соответствовать корневому элементу DOCTYPE "filmographie".

и

Содержимое элемента типа "film" должноматч "(титр, виза, национал, платит, жанры, эксплуатация, реалист, дюри, актеры, сценарий)".

1 Ответ

0 голосов
/ 27 сентября 2019

Проблема в том, что ваш второй элемент film не содержит элемент <acteurs> в соответствии с DTD.

Итак, у вас есть следующие возможности:

  1. Добавить *Элемент 1008 * с соответствующими подэлементами ко второму элементу film.
  2. Измените ваш DTD на

    <!ELEMENT films (film)+>
    <!ELEMENT film (titre, visa, nationalite, pays, genres, exploitation,       
    realisateur, duree, acteurs?, scenario)>
    <!ELEMENT titre (#PCDATA)>
    <!ELEMENT visa (#PCDATA)>
    <!ELEMENT nationalite (#PCDATA)>
    <!ELEMENT pays (nom)*>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT genres (genre)+>
    <!ELEMENT genre (#PCDATA)>
    <!ELEMENT exploitation (date_de_sortie, nombre_entrees, nombre_salles)>
    <!ELEMENT date_de_sortie (#PCDATA)>
    <!ELEMENT nombre_entrees (#PCDATA)>
    <!ELEMENT nombre_salles (#PCDATA)>
    <!ELEMENT realisateur (#PCDATA)>
    <!ELEMENT duree (heures, minutes)>
    <!ELEMENT heures (#PCDATA)>
    <!ELEMENT minutes (#PCDATA)>
    <!ELEMENT acteurs (acteur+)>
    <!ELEMENT acteur (#PCDATA)>
    <!ATTLIST heures unite CDATA 'h'>
    <!ATTLIST minutes unite CDATA 'mn' >
    <!ELEMENT scenario (#PCDATA) >
    

    Этот DTD изменяет одну вещь: он добавляет дополнительныйоператор ? для элемента acteurs в объявлении film.Таким образом, новое определение -

    <!ELEMENT film (titre, visa, nationalite, pays, genres, exploitation, realisateur, duree, acteurs?, scenario)>
    

Это решит вашу проблему, и решение вашей проблемы - это добавление одного символа.

...