DTD。内容模型不是威慑者

时间:2015-05-16 05:35:54

标签: xml xmllint

我需要你的建议。如何在替代选择中描述相同的元素。例如:

<!DOCTYPE offers [
<!ELEMENT offers (offer+)>
<!ELEMENT offer ((name, cost) | (id?, name, tag, desc?) | (prefix, title, desc?))>
<!ELEMENT name (#PCDATA)>
<!ELEMENT cost (#PCDATA)>
<!ELEMENT tag (#PCDATA)>
<!ELEMENT desc (#PCDATA)>
<!ELEMENT prefix (#PCDATA)>
<!ELEMENT title (#PCDATA)>
] >

<offers>
    <offer>
        <name>Name1</name>
        <cost>123</cost>
    </offer> 
    <offer>
        <id>123</id>
        <name>Name2</name>
        <tag>sale</tag>
        <desc>Some Description</desc>
    </offer>
    <offer>
        <prefix>Book</prefix>
        <title>Little Pony</title>
    </offer>    
</offers>

标记名称在两个变体中重复,如何在dtd中描述元素期间解决此问题。 请求帮助

1 个答案:

答案 0 :(得分:0)

我认为这个内容模型最接近您的需求:

<!ELEMENT offer ((id?, name, (cost | (tag, desc?))) | (prefix, title, desc?)) >

但是,通过这种方式,您还可以在内容模型之前插入<id> <name><cost>,这似乎不是您的情况原始的DTD - 但我不知道怎样才能获得你想要的东西。

PS:您还需要在DTD id

中声明<!ELEMENT id (#PCDATA)>元素

PS 2:您的原始文档使用Xerces正确解析。