【问题标题】:How can I validate intermediate text via a DTD?如何通过 DTD 验证中间文本?
【发布时间】:2014-12-01 15:33:01
【问题描述】:

我的 XML-DTD 无法验证此代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE init[
<!ELEMENT init(a)>
<!ELEMENT a(b,c,(d|e))>
<!ELEMENT b (#PCDATA)>
<!ELEMENT c (#PCDATA)>
<!ELEMENT d (#PCDATA)>
<!ELEMENT e (#PCDATA)>
]>
<init>
<a>
dolor
<b> Lorem </b>
dolor
<c> Ipsum </c>
<d> hi </d>
dolor
</a>
</init>

如何通过 DTD 验证中间文本?

PD: 抱歉,我编辑了问题——我的问题没有解决。

PD2: 我用它来验证 dtd-html:http://validator.w3.org/check

【问题讨论】:

    标签: xml validation dtd dtd-parsing


    【解决方案1】:

    我看到了几件事:

    1. 您需要在元素名称和内容模型(左括号)之间添加空格。
    2. 您需要将a 声明为mixed content 模型。

    示例...

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE init [
    <!ELEMENT init (a)>
    <!ELEMENT a (#PCDATA|b|c)*>
    <!ELEMENT b (#PCDATA)>
    <!ELEMENT c (#PCDATA)>
    ]>
    <init>
        <a>
            dolor
            <b> Lorem </b>
            dolor
            <c> Ipsum </c>
            dolor
        </a>
    </init>
    

    示例 #2...

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE init [
    <!ELEMENT init (a)>
    <!ELEMENT a (#PCDATA|b|c|d|e)*>
    <!ELEMENT b (#PCDATA)>
    <!ELEMENT c (#PCDATA)>
    <!ELEMENT d (#PCDATA)>
    <!ELEMENT e (#PCDATA)>
    ]>
    <init>
        <a>
            dolor
            <b> Lorem </b>
            dolor
            <c> Ipsum </c>
            <d> hi </d>
            dolor
        </a>
    </init>
    

    【讨论】:

    • 我改变了问题,但你的解决方案对以前的情况有好处。
    • @CodeNoob - a 仍然是混合内容模型,必须以某种方式声明。我添加了第二个示例。请参阅w3.org/TR/xml11/#sec-mixed-content 了解更多信息。
    猜你喜欢
    • 2012-10-29
    • 2023-03-07
    • 2015-05-18
    • 1970-01-01
    • 2014-10-03
    • 2011-06-14
    • 2010-12-12
    • 2010-09-06
    相关资源
    最近更新 更多