Xml 如何使用IDREF

Xml 如何使用IDREF,xml,dtd,Xml,Dtd,我正在编写一个XML文档,并试图说明它的规范 我认为我可以指定一个标记的属性可以限制为另一个标记的属性,我认为这可以使用来完成!ATTLIST的IDREF,但我不太确定。例如: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE CUSTOM_RIBBON [ <!ELEMENT CUSTOM_RIBBON (VERSION, ICONS, SCRIPT+, CMD_ID+, CATEGORY)> <

我正在编写一个XML文档,并试图说明它的规范

我认为我可以指定一个标记的属性可以限制为另一个标记的属性,我认为这可以使用
来完成!ATTLIST
的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>

]>
//这里有一些脚本
消息框(“啊哈!”);
我想具体说明:

  • 按钮
    标记必须具有一个属性
    名称
    ,该属性在
    CMD\u ID
    标记的
    名称
    属性中必须具有相同的文本
  • CMD-ID
    标记有一个
    script
    属性,该属性在
    script
    标记的
    name
    属性中必须具有相同的文本
  • 如果
    CMD\u ID
    SPEC
    具有
    按下的
    属性
    ,则不能有兄弟姐妹
  • 如果
    CMD_ID
    SPEC
    具有
    按下的
    属性
    true
    false
    ,则必须具有
    false
    true
    的同级

我怎样才能做到这一点呢?

看起来DTD是做不到的。我将不得不和你一起去