2

我不知道我的问题是否被正确提出。我有一个包含 DTD 的 XML 文档。我已经定义了 ATTLIST,如果我多次使用相同的属性,我想限制或修改 XML 验证将引发错误或失败的 DTD。我的 XML 文档如下所示:

<?xml version="1.0" encoding="utf-8"?>
<!-- DTD START -->
<!DOCTYPE dtype
[
    <!ELEMENT   dtype   (ea?, eb?, ec, ed?) >
    <!ELEMENT   ea      (data+)             >
    <!ELEMENT   eb      (ee+)               >
    <!ELEMENT   ec      (data+)             >
    <!ELEMENT   ed      (data+)             >
    <!ELEMENT   ee      (data+)             >
    <!ELEMENT   data    (#PCDATA)           >

    <!ATTLIST   ee
                    ef      CDATA   #REQUIRED
    >
    <!ATTLIST   data
                    element CDATA   #REQUIRED
                    value   CDATA   #IMPLIED
                    unit    CDATA   #IMPLIED
                    min     CDATA   #IMPLIED
                    max     CDATA   #IMPLIED
                    avg     CDATA   #IMPLIED
    >
]>
<!-- DTD END -->

<!-- DATA START -->
<dtype>
  <ec>
    <data element="A" unit="counts" min="0.6621" avg="0.6819" max="0.7089" />
    <data element="B" unit="counts" min="0.0463" avg="0.0473" max="0.0503" />
    <data element="C" unit="counts" min="0.1238" avg="0.1264" max="0.1344" />
  </ec>
</dtype>
<!-- DATA END -->

<!-- should be detected as not ok ! -->
<!--
<dtype>
  <ec>
    <data element="A" unit="counts" min="0.6621" avg="0.6819" max="0.7089" />
    <data element="B" unit="counts" min="0.0463" avg="0.0473" max="0.0503" />
    <data element="B" unit="counts" min="0.1238" avg="0.1264" max="0.1344" />
    <data element="C" unit="counts" min="0.1348" avg="0.1644" max="0.1654" />
  </ec>
</dtype>
-->

例如,我想限制 DTD 以允许一个属性element="B"

这可能吗?

4

1 回答 1

0

我认为 DTD 中唯一的选择是使属性 type ID。AnID必须是Name( http://www.w3.org/TR/REC-xml/#NT-Name ),因此这可能不适用于您的数据。(尽管它适用element于您的示例数据中的属性。)

例如,此 XML 将无效,因为element="A"使用了两次:

<!DOCTYPE dtype
[
    <!ELEMENT   dtype   (ea?, eb?, ec, ed?) >
    <!ELEMENT   ea      (data+)             >
    <!ELEMENT   eb      (ee+)               >
    <!ELEMENT   ec      (data+)             >
    <!ELEMENT   ed      (data+)             >
    <!ELEMENT   ee      (data+)             >
    <!ELEMENT   data    (#PCDATA)           >

    <!ATTLIST   ee
                    ef      CDATA   #REQUIRED
    >
    <!ATTLIST   data
                    element ID   #REQUIRED
                    value   CDATA   #IMPLIED
                    unit    CDATA   #IMPLIED
                    min     CDATA   #IMPLIED
                    max     CDATA   #IMPLIED
                    avg     CDATA   #IMPLIED
    >
]>
<!-- DTD END -->

<!-- DATA START -->
<dtype>
    <ec>
        <data element="A" unit="counts" min="0.6621" avg="0.6819" max="0.7089" />
        <data element="B" unit="counts" min="0.0463" avg="0.0473" max="0.0503" />
        <data element="A" unit="counts" min="0.1238" avg="0.1264" max="0.1344" />
    </ec>
</dtype>
于 2013-05-29T17:01:39.227 回答