Этот DTD действителен? - PullRequest
       39

Этот DTD действителен?

0 голосов
/ 19 февраля 2020

Учитывая, что в XML вложено несколько элементов name, я не уверен, работает ли он. Должен ли я использовать несколько элементов имени, чтобы описать это?

Есть ли ограничение, которое я пропустил? И я не совсем уверен, правильно ли я здесь использую NMTOKEN против CDATA. PCDATA я в этом совершенно уверен.

<?xml version="1.0" standalone="yes"?>

   <!DOCTYPE teachers [
    <!ELEMENT teachers (teacher+)>
    <!ELEMENT teacher (name,course+)>

    <!ATTLIST teacher 
        joiningDate NMTOKEN #REQUIRED
        jobRole CDATA #REQUIRED
        >

    <!ELEMENT name (#PCDATA)>
    <!ELEMENT course (name, submodule+)>
    <!ELEMENT submodule (name, year+)>
    <!ELEMENT year (#PCDATA)>
    ]>


   <teachers>
      <teacher joiningDate="2018" jobRole="Professor">
         <name>John Smith</name>
         <course>
            <name>Intro to Psych 1</name>
            <submodule>
               <name>The Mind</name>
               <year>2018-2019</year>
               <year>2019-2020</year>
            </submodule>
         </course>
         <course>
            <name>Econ 101</name>
            <submodule>
               <name>Macro</name>
               <year>2018-2019</year>
               <year>2019-2020</year>
            </submodule>
         </course>
      </teacher>
   </teachers>

1 Ответ

0 голосов
/ 19 февраля 2020

Парсер выдает какие-либо сообщения об ошибках? Если нет, все в порядке.

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

...