这个dtd语法出了什么问题?

时间:2017-05-10 20:33:55

标签: xml dtd

无法绕过我的脑袋 - 为什么xmllint抱怨这个dtd语法,特别是et_snote行。 - 我在这里做错了什么?

<!ELEMENT et_snote (is_required?, (#PCDATA | vis? | ri?)*) >
<!ELEMENT is_required ( #PCDATA ) >

我收到此错误:

schema.dtd:166: parser error : expected '>'
<!ELEMENT et_snote (is_required?, ( #PCDATA | vis? | ri? )+) >

这是我运行的命令:

xmllint --noout --nowarning --nonet --dtdvalid schema.dtd my.xml

2 个答案:

答案 0 :(得分:2)

您已将et_snote的类型声明为元素内容,根据定义cannot have character data,可以删除#PCDATA或将类型更改为混合内容。

答案 1 :(得分:-1)

我认为在使用或?时,您不能使用|之类的内容。它也没有意义,因为你说:&#34;你可以使用这三个元素中的任何一个,但是如果你使用的是第二个或第三个元素,你可以省略它&#34;。我假设你想让?and ri`可选。因为你提供了替代品而且只想要一个元素,你可以说:

<!ELEMENT et_snode (is_required?, ( #PCDATA | vis | ri )+) >