Хобрук: Ваш путь к мастерству в программировании

java DocumentBuilder с проверкой DTD проверяет недопустимый XML

Мне дали простой XML-документ с проверкой DTD со следующей структурой:

люди.xml

<?xml version='1.0' encoding='ISO-8859-15' ?>

<!DOCTYPE people SYSTEM "people.dtd">

<people>
    <person dni="1234345F" >
        <name>pepe</name>
        Description for pepe
        <age>12</age>
        <subject>maths</subject>
        <subject>history</subject>
    </person>
    <person dni="12343sdfF" >
        Description for marcos
        <name>marcos</name>
        <age>12</age>
        <subject>music</subject>
        <subject>Spanish</subject>
    </person>
    <person dni="345634345F" >
        <name>JL</name>
        <age>25</age>
        <subject>science</subject>
        <subject>maths</subject>
        Description for JL
    </person>
</people>

Как видите, расположение текстового узла описания для каждого человека неизвестно в момент проверки. Я написал это DTD:

люди.dtd

<!ELEMENT people (person+)>
<!ELEMENT person (name|age|subject+|#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ATTLIST person dni CDATA #REQUIRED>

Я перепробовал почти все комбинации для этой строки (name|age|subject+|#PCDATA), но мне все еще не удается сопоставить ее с XML-документом.

08.12.2015

  • Извините за неправильное название! Я бы отредактировал заголовок, но не вижу ссылки для этого. 09.12.2015
  • Чтобы изменить заголовок или текст вопроса, нажмите «Изменить» под вопросом. 09.12.2015

Ответы:


1

Вы не можете указать порядок, если у вас смешанный контент (http://www.w3.org/TR/xml/#sec-mixed-content).

Вы должны объявить person следующим образом:

<!ELEMENT person (#PCDATA|name|age|subject)*>
08.12.2015
  • Что произойдет, если у данного человека ELEMENT нет подданных? Мне нужно проверить, есть ли хотя бы один из них или больше. 09.12.2015
  • @sonirico - я бы предложил добавить элемент для описания, чтобы вы могли указать порядок и появление. 09.12.2015
  • Новые материалы

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..