为什么我有这个错误元素类型 "message" must not be declared more than once

why do i have this error element type "message" must not be declared more than once

我有这个 dtd 文件

<!DOCTYPE messages
[
<!ELEMENT messages (message,contact,group)>
<!ELEMENT message (transmitter,receiver)>
<!ELEMENT message (#PCDATA)>
<!ELEMENT transmitter (#PCDATA)>
<!ATTLIST message type (text|vocal|file) >

<!ELEMENT receiver (#PCDATA)>
<!ELEMENT receiver(contact,group)>
<!ELEMENT contact (contact_name,contact_first_name )>
<!ELEMENT contact_name (#PCDATA)>
<!ELEMENT contact_first_name (#PCDATA)>
<!ELEMENT group(name_group,file_group)>
<!ELEMENT name_group (#PCDATA)>
<!ELEMENT file_group (#PCDATA)>
<!ATTLIST file_group type(text | vocal| file)>
]>

这是我的 xml 文件 我的目标是将此文件分配给 xml 文件

<messages>
    <message type="text">
        <transmitter> Brahim </transmitter>
        <receiver> 
            <contact>
            
            </contact>
            <group>
            
            </group>
         </receiver>
    </message>
    <contact>
        <contact_name> Brahim Elmoctar </contact_name>
        <contact_first_name> TLEIMIDI </contact_first_name>
    </contact>
    <group>
    <name_group> M1SRT</name_group>
    <file_group type="file"> </file_group>
    </group>
</messages>

xml 工作正常但是当我添加 dtd 文件时它停止工作。 你能给我解释一下为什么会出现这个错误吗?

您不能多次声明一个元素。例如,您将“消息”声明了两次:

<!ELEMENT message (transmitter,receiver)>
<!ELEMENT message (#PCDATA)>

如果您希望message同时允许子元素和PCDATA(称为“混合内容”),您must declare it a certain way:

<!ELEMENT message (#PCDATA|transmitter|receiver)*>

您需要对 receiver 执行相同的操作。

如果不需要混合内容,只需删除“PCDATA”声明即可。

还有一些其他问题...

  • 元素名称和型号之间必须有一个 space。例如 <!ELEMENT group(name_group,file_group)> 应该是 <!ELEMENT group (name_group,file_group)>(注意“组”后的 space)。
  • 您的枚举没有为“类型”属性正确声明。您需要将它们设置为#IMPLIED、#REQUIRED,或者给它们一个默认值。

更新示例序言:

<!DOCTYPE messages
[
<!ELEMENT messages (message,contact,group)>
<!ELEMENT message (#PCDATA|transmitter|receiver)*>
<!ELEMENT transmitter (#PCDATA)>
<!ATTLIST message type (text|vocal|file) #REQUIRED>

<!ELEMENT receiver (#PCDATA|contact|group)*>
<!ELEMENT contact (contact_name,contact_first_name )>
<!ELEMENT contact_name (#PCDATA)>
<!ELEMENT contact_first_name (#PCDATA)>
<!ELEMENT group (name_group,file_group)>
<!ELEMENT name_group (#PCDATA)>
<!ELEMENT file_group (#PCDATA)>
<!ATTLIST file_group type (text|vocal|file) #REQUIRED>
]>