2017-08-17 163 views
0

我的XML和DTD存在問題,我無法理解它是什麼。 通常情況下,我的XML結構良好:驗證XML和DTD

<?xml version='1.0' encoding='UTF-8' standalone="no"?> 
<!DOCTYPE corpus SYSTEM "POUR.dtd"> 

<corpus> 
    <position type="pour"> 
    <discours auteur="Aécio Neves" id="1" date="25/08/2016" lieu="Senado 
    Federal">blablabla</discours> 
    </position> 
</corpus> 

而且我做了我DTD太:

<?xml version='1.0' encoding='UTF-8'?> 

<!ELEMENT corpus (discours)+> 
<!ELEMENT discours (auteur, date, lieu)> 
<!ATTLIST discours id CDATA #REQUIRED> 
<!ELEMENT auteur (#CDATA)> 
<!ELEMENT date (#CDATA)> 
<!ELEMENT lieu (#CDATA)> 

我的驗證:xmllint POUR.xml --dtdvalid POUR.dtd --noout

錯誤:

POUR.dtd:7: parser error : ContentDecl : Name or '(' expected 
<!ELEMENT auteur (#CDATA)> 
      ^
POUR.dtd:7: parser error : expected '>' 
<!ELEMENT auteur (#CDATA)> 
      ^
POUR.dtd:7: parser error : Content error in the external subset 
<!ELEMENT auteur (#CDATA)> 

有人能幫助我嗎?謝謝! :-)

+0

你還沒有告訴我們問題是什麼。 – Quentin

回答

0

你有很多問題。我專注於你看到的那個。

隨着

<!ELEMENT auteur (whatever here)> 

你宣佈一個元素<導演>。要聲明僅包含文本的元素,你需要聲明的內容#PCDATA:

<!ELEMENT auteur (#PCDATA)> 

但是你的XML不包含<導演>元素。導演是要素<說明>的屬性。因此,聲明它的正確方法是將其添加到在ATTLIST中聲明的屬性列表中。在那裏,因爲它是一個屬性,所以要指示的正確類型是CDATA。