尝试针对DTD验证XML

时间:2016-05-10 09:03:03

标签: xml validation 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>
...

我得到的错误(两次,所以我猜它是内部def,而不是外部)是:

  

元素类型“def”的内容必须匹配   “(GR,购*,共*,SR,ETM,CATEG *,(DEF + |????deftext))”。

那是没有或一个 gr (ok),没有或很多 ex (ok),没有或很多 co <​​/ em>(ok),没有或者一个 sr etm (无),无或多个 categ (ok)以及一个或多个 def 或者只有一个 deftext (外部和内部def都可以)。我理解这是正确的还是我有一些东西可以忽略?

1 个答案:

答案 0 :(得分:2)

是的,当你说:

时,你是对的
  

那是没有或一个gr(ok),没有或很多ex(ok),没有或很多co(ok),没有或者一个sr,etm(无),没有或多个类别(ok)以及一个或多个def或者只有一个deftext(外部和内部def都可以)。我理解这是正确的还是我有一些东西可以忽略?

但每次你写一个逗号,就意味着“然后” - 必须的顺序。

因此,您的文档在此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>