为什么我有这个错误元素类型 "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>
]>
我有这个 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>
]>