2016-01-26 7 views
0

Я знаю, как проверить XML-документ против DTD на одном уровне, но, как мы можем это сделать, когда данные вложены (несколько уровней). Корень chapters, а под корнем у меня есть два основных элемента: chapter1 и chapter2, и под каждым из них есть подэлементы. Название этих подэлементов идентично как chapter1, так и chapter2. Мой вопрос: нужно ли объявлять <!ELEMENT mainTopic CDATA #REQUIRED > один или два раза в порядке, под каждой декларацией chapter1 и chapter2?Как проверить документ XML на DTD при наличии нескольких уровней?

<chapters> 
    <chapter1> 
     <mainTopic>HTML MARKUP AND DOCUMENT STRUCTURE</mainTopic> 
     <subTopic1>The Basics of Markup</subTopic1> 
     <subTopic2>Anatomy of an HTML Document</subTopic2> 
     <subTopic3>The Document Object Model</subTopic3> 
    </chapter1> 
    <chapter2> 
     <mainTopic>HOW CSS WORKS</mainTopic> 
     <subTopic1>The Anatomy of CSS Rule</subTopic1> 
     <subTopic2>Contexual Selectors</subTopic2> 
     <subTopic3>Specialized Contextual Selectors</subTopic3> 
     <subTopic4>IDs and Classes</subTopic4> 
     <subTopic5>Attibute Selectors</subTopic5> 
     <subTopic6>Pseduo-Classes</subTopic6> 
     <subTopic7>Pseduo-Elements</subTopic7> 
     <subTopic8>Inheritance</subTopic8> 
     <subTopic9>The Cascade</subTopic9> 
     <subTopic10>Rule Declaration</subTopic10> 
    </chapter2> 
</chapters> 

Ниже приведен код рядный DTD:

<!DOCTYPE chapters [ 
    <!ELEMENT chapters (chapter1, chapter2)> 

    <!ELEMENT chapters (chapter1, chapter2) > 
    <!ELEMENT chapter1 (mainTopic, subTopic1, subTopic2, subTopic3) > 

    <!ELEMENT chapter2 (mainTopic, subTopic1, subTopic2, subTopic3, subTopic4, subTopic5, subTopic6, subTopic7, subTopic8, subTopic9, subTopic10) > 
    <!ELEMENT mainTopic (#PCDATA) > 
    <!ELEMENT subTopic1 (#PCDATA) > 
    <!ELEMENT subTopic2 (#PCDATA) > 
    <!ELEMENT subTopic3 (#PCDATA) > 
    <!ELEMENT subTopic4 (#PCDATA) > 
    <!ELEMENT subTopic5 (#PCDATA) > 
    <!ELEMENT subTopic6 (#PCDATA) > 
    <!ELEMENT subTopic7 (#PCDATA) > 
    <!ELEMENT subTopic8 (#PCDATA) > 
    <!ELEMENT subTopic9 (#PCDATA) > 
    <!ELEMENT subTopic10 (#PCDATA) > 
]> 

ответ

2

мне нужно объявить <!ELEMENT mainTopic CDATA #REQUIRED > один или два раза , чтобы делать, под каждым chapter1 и chapter2 декларации?

Вы можете объявить элемент только один раз. Ваше объявление для mainTopic в вашем примере DTD верное. (Декларация в вышеприведенной цитате нет.)

Вашего DTD и экземпляр является действительными, если вы удалите вторую декларацию для chapters ...

<!DOCTYPE chapters [ 
    <!ELEMENT chapters (chapter1, chapter2)> 

    <!ELEMENT chapter1 (mainTopic, subTopic1, subTopic2, subTopic3) > 

    <!ELEMENT chapter2 (mainTopic, subTopic1, subTopic2, subTopic3, subTopic4, subTopic5, subTopic6, subTopic7, subTopic8, subTopic9, subTopic10) > 
    <!ELEMENT mainTopic (#PCDATA) > 
    <!ELEMENT subTopic1 (#PCDATA) > 
    <!ELEMENT subTopic2 (#PCDATA) > 
    <!ELEMENT subTopic3 (#PCDATA) > 
    <!ELEMENT subTopic4 (#PCDATA) > 
    <!ELEMENT subTopic5 (#PCDATA) > 
    <!ELEMENT subTopic6 (#PCDATA) > 
    <!ELEMENT subTopic7 (#PCDATA) > 
    <!ELEMENT subTopic8 (#PCDATA) > 
    <!ELEMENT subTopic9 (#PCDATA) > 
    <!ELEMENT subTopic10 (#PCDATA) > 
]> 

Off темы; если у вас есть контроль над DTD и XML, я бы настоятельно предложил не объявлять отдельные элементы chapter# и subTopic# (с конечным числом). Ничто не достигается этим. Я бы объявил только одно chapter и subTopic ...

<!DOCTYPE chapters [ 
<!ELEMENT chapters (chapter+)> 
<!ELEMENT chapter (mainTopic, subTopic+)> 
<!ELEMENT mainTopic (#PCDATA)> 
<!ELEMENT subTopic (#PCDATA)> 
]> 
<chapters> 
    <chapter> 
     <mainTopic>HTML MARKUP AND DOCUMENT STRUCTURE</mainTopic> 
     <subTopic>The Basics of Markup</subTopic> 
     <subTopic>Anatomy of an HTML Document</subTopic> 
     <subTopic>The Document Object Model</subTopic> 
    </chapter> 
    <chapter> 
     <mainTopic>HOW CSS WORKS</mainTopic> 
     <subTopic>The Anatomy of CSS Rule</subTopic> 
     <subTopic>Contexual Selectors</subTopic> 
     <subTopic>Specialized Contextual Selectors</subTopic> 
     <subTopic>IDs and Classes</subTopic> 
     <subTopic>Attibute Selectors</subTopic> 
     <subTopic>Pseduo-Classes</subTopic> 
     <subTopic>Pseduo-Elements</subTopic> 
     <subTopic>Inheritance</subTopic> 
     <subTopic>The Cascade</subTopic> 
     <subTopic>Rule Declaration</subTopic> 
    </chapter> 
</chapters>