XML DTD父对象与子对象相同

XML DTD父对象与子对象相同,xml,dtd,Xml,Dtd,举个例子。在我的xml中 <?xml version="1.0"?> <!DOCTYPE expression SYSTEM "task3-1.dtd"> <expression> <left-bracket>(</left-bracket> <expression> <left-bracket>(</left-bracket> <expression>

举个例子。在我的xml中

<?xml version="1.0"?>
<!DOCTYPE expression SYSTEM "task3-1.dtd">
<expression>
  <left-bracket>(</left-bracket>
  <expression>
    <left-bracket>(</left-bracket>
    <expression>
      <number>24</number>
      <operation>+</operation>
      <number>24</number>
    </expression>
    <right-bracket>)</right-bracket>
    <operation>*</operation>
    <number>5</number>
  </expression>
  <right-bracket>)</right-bracket>
  <operation>-</operation>
  <number>6</number>
</expression>

(
(
24
+
24
)
*
5.
)
-
6.
当我尝试运行dtd时,总是出现以下错误: 元素“表达式”的子元素“number”无效。预期的可能元素列表:“左括号”

<!ELEMENT expression (left-bracket+,right-bracket,operation,number+)>
<!ELEMENT left-bracket (#PCDATA)>
<!ELEMENT right-bracket (#PCDATA)>
<!ELEMENT operation (#PCDATA)>
<!ELEMENT number (#PCDATA)>

根据DTD,元素必须包含以下序列:

  • 一个或多个
    元素,后跟
  • 只有一个
    元素,后跟
  • 只有一个
    元素,后跟
  • 一个或多个
    元素
  • 这是代表
    内容模型的这一行所声明的:

    (left-bracket+,right-bracket,operation,number+)
    
    由于您的实例在
    之后有一个
    元素(而不是
    或另一个
    ),因此验证失败

    错误消息指的是
    元素,该元素也不能出现在
    内的该位置。根据DTD,可能存在多个
    元素(一个是必需的),但仅在所有其他元素之后

    如果要创建XML文件以遵守DTD的规则,则必须更改文档结构。如果您实际上是在设计DTD来表示希望在文档中验证的某些规则,那么您必须决定如何表示数据。例如,
    expression
    元素的内容模型设计方式不允许嵌套表达式

    此DTD验证您的实例并允许嵌套表达式(当然,它可能不是您想要的-我基于对文档结构的快速查看):


    一个选项是将所有内容设置为
    (零或一)

    
    
    此处答案可能重复,对该问题没有任何帮助。请移除您向我们展示的一些XML;您向我们展示了一些DTD;正如验证器告诉您的,XML对DTD无效。你的问题是什么?我在元素“expression”中仍然有一个错误,它的子元素“expression”无效是的。DTD不允许嵌套的
    元素。您必须决定哪些是DTD的规则。我在上面提出了一些建议,但我可能错了,因为我不知道你想要实现什么的细节。验证时不要出错。但是您的代码仍然存在相同的错误。您的源代码使用我提供的DTD进行验证。可能您正在使用的XML文档与您发布的XML文档不完全相同。
    <!ELEMENT expression ( ( (left-bracket,expression+,right-bracket)*,(operation,number)* ) | (number,operation,number) )>
    <!ELEMENT left-bracket (#PCDATA)>
    <!ELEMENT right-bracket (#PCDATA)>
    <!ELEMENT operation (#PCDATA)>
    <!ELEMENT number (#PCDATA)>
    
    <!ELEMENT expression (left-bracket?,expression?,right-bracket?,number?,operation?,number?)>
    <!ELEMENT left-bracket (#PCDATA)>
    <!ELEMENT right-bracket (#PCDATA)>
    <!ELEMENT operation (#PCDATA)>
    <!ELEMENT number (#PCDATA)>