验证XML和DTD

时间:2017-08-17 09:16:42

标签: xml 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)>

任何人都可以帮助我吗?谢谢! : - )

1 个答案:

答案 0 :(得分:0)

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

使用

<!ELEMENT auteur (whatever here)>

您要声明一个元素&lt; auteur&gt;。要声明仅包含文本的元素,您需要声明内容#PCDATA:

<!ELEMENT auteur (#PCDATA)>

但是,您的XML不包含&lt; auteur&gt;元件。 auteur是元素&lt; discours&gt;的属性。因此,声明它的正确方法是将其添加到ATTLIST中声明的属性列表中。在那里,由于它是一个属性,正确的类型是CDATA。