如何使用IDREF

时间:2015-02-02 18:53:40

标签: xml xml-dtd

我正在编写XML文档并试图说明其规范。

我认为我可以指定标记的属性可以限制为另一个标记的属性,我认为可以使用!ATTLIST' s IDREF完成,但是我不太确定。例如:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE CUSTOM_RIBBON
[
    <!ELEMENT CUSTOM_RIBBON (VERSION, ICONS, SCRIPT+, CMD_ID+, CATEGORY)>
    <!ELEMENT ICONS (#CDATA)>
    <!ELEMENT SCRIPT (#CDATA)>
    <!ELEMENT CMD_ID (SPEC)>
    <!ELEMENT CATEGORY (PANEL)>
    <!ELEMENT PANEL (BUTTON, GROUP, SEPARATOR)+>
    <!ELEMENT GROUP (BUTTON, SEPARATOR)+>
    <!ELEMENT BUTTON EMPTY>
    <!ATTLIST BUTTON name IDREF #REQUIRED>

    <!ELEMENT SEPARATOR EMPTY>

    <!ELEMENT VERSION EMPTY>
    <!ATTLIST VERSION value CDATA #REQUIRED>
]>
<CUSTOM_RIBBON>
    <SCRIPT name="button1-script">
        // some script here
        messagebox("AHHH!");
    </SCRIPT>

    <CMD_ID name="button1">
        <SPEC pressed="both" script="button1-script" text="boo!" />
    </CMD>

    <CATEGORY name="Foo">
        <PANEL name="Bar">
            <BUTTON name="button1" />
        </PANEL>
    </CATEGORY>
<CUSTOM_RIBBON>

我想指明:

  • BUTTON代码必须包含属性name 必须 CMD_ID代码中具有相同的文字&#39; s name属性。
  • CMD-ID代码具有script属性, 必须 SCRIPT代码中具有相同的文字name属性。
  • 如果CMD_ID SPEC的{​​{1}}属性为pressed,那么 就不能 有一个兄弟姐妹。
  • 如果both CMD_ID的{​​{1}}属性为SPECpressed,那么 必须 有一个truefalse的兄弟。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

看起来我不能用DTD做这件事。我必须改为使用XSD