2017-08-17 113 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。