尝试根据 DTD 验证 XML

Trying to validate XML against DTD

我正在尝试生成有效的 xdxf 文档 (here's the DTD)。我设法解决了除一个错误之外的所有错误,但我不知道出了什么问题。

相关部分是

...
<def>
    <def>
        <gr>n. s.</gr>
        <deftext>
            <tr>pronunciation</tr>
            <dtrn>Meaning</dtrn>
        </deftext>
        <co>Inflected forms</co>
        <ex>
            <ex_orig>Examples</ex_orig>
        </ex>
    </def>
    <def>
        <gr>n. s.</gr>
        <deftext>
            <tr>pronunciation</tr>
            <dtrn>Another meaning</dtrn>
        </deftext>
        <co>Inflected forms</co>
        <ex>
            <ex_orig>Examples</ex_orig>
        </ex>
    </def>
</def>
...

我得到的错误(两次,所以我猜是针对内部定义,而不是外部定义)是:

The content of element type "def" must match "(gr?,ex*,co*,sr?,etm?,categ*,(def+|deftext))".

那是 none 或一个 gr(好),none 或许多 ex(好), none 或许多 co(好),none 或一个 sretm (none), none 或许多 categ (ok) 和一个或多个 def 或恰好一个deftext(外部和内部 def 都可以)。我的理解是正确的还是我忽略了什么?

是的,你说得对:

That's none or one gr (ok), none or many ex (ok), none or many co (ok), none or one sr, etm (none), none or many categ (ok) and either one or more def or exactly one deftext (ok for both outer and inner def). I'm I understanding this right or is there something I'm overlooking?

但是每次你写一个逗号,它的意思是“然后” - 顺序必须得到尊重。

因此您的文档在这个 DTD 方面是不正确的,因为在以下方面:

<def>
    <gr>n. s.</gr>
    <deftext>
        <tr>pronunciation</tr>
        <dtrn>Another meaning</dtrn>
    </deftext>
    <co>Inflected forms</co>
    <ex>
        <ex_orig>Examples</ex_orig>
    </ex>
</def>

元素<co><ex>不允许出现在<deftext>之后。

更正后的版本为:

<def>
    <gr>n. s.</gr>
    <ex>
        <ex_orig>Examples</ex_orig>
    </ex>
    <co>Inflected forms</co>
    <deftext>
        <tr>pronunciation</tr>
        <dtrn>Another meaning</dtrn>
    </deftext>
</def>

先是<gr>,然后是<ex>,然后是<co>,最后是<deftext>