XML 和 DTD 的验证

Validation of an XML and DTD

我的 XML 和 DTD 有问题,我不明白它是什么。 通常,我的 xml 格式正确:

<?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)>

有人可以帮助我吗?谢谢! :-)

你有很多问题。我专注于你看到的那个。

<!ELEMENT auteur (whatever here)>

您正在声明一个元素 。声明一个只包含文本的元素,需要声明内容#PCDATA:

<!ELEMENT auteur (#PCDATA)>

但是您的 XML 不包含 元素。 auteur 是元素 的一个属性。因此声明它的正确方法是将它添加到 ATTLIST 中声明的属性列表中。在那里,因为它是一个属性,所以要指示的正确类型是 CDATA。