假设我们有一个名为first
的根元素
现在首先有2个子元素,分别叫做第二个和第三个,或者只是文本(#PCDATA)
第二个元素应始终在第三个元素之前声明
现在,第二个子元素可以有另一个(只有一个)第二个子元素或只有文本(#PCDATA)
第三个子元素只能有文本(#PCDATA)
所以我们可以这样:
<first>
<second> I'm in second </second>
<third> I'm in third </third>
</first>
或类似的东西:
<first>
<second>
<second> I'm in second </second>
</second>
<third> I'm in third </third>
</first>
这里的困难是,如何使第一个第二个元素只能接受一个第二个子元素 虽然第二个子元素也是第二个元素,但它不能接受除文本之外的其他元素,因为它已经是另一个元素的子元素
我尝试过创建这样的东西
<!DOCTYPE first [
<!ELEMENT first (second,third)>
<!ELEMENT second (#PCDATA | second, third)>
<!ELEMENT third (#PCDATA)>
]>
但不幸的是,这根本不起作用
我正在使用此验证器:http://validator.w3.org/check
和此代码
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE first [
<!ELEMENT first (second,third)>
<!ELEMENT second (#PCDATA | second, third)>
<!ELEMENT third (#PCDATA)>
]>
<first>
<second> I'm in second </second>
<third> I'm in third </third>
</first>
它给了我错误
任何想法?
答案 0 :(得分:2)
每当您拥有混合内容模型(PCDATA和其他元素)时,您都无法使用,
(“后跟”)序列运算符/连接器指定顺序。
您必须使用|
(“或”)序列运算符/连接器。您也无法在同一组中混合使用,
和|
。您还必须使用*
(“零或更多”)事件指示器。
示例强>
<!DOCTYPE first [
<!ELEMENT first (second,third)>
<!ELEMENT second (#PCDATA|second|third)*>
<!ELEMENT third (#PCDATA)>
]>