【问题标题】:How to use IDREF如何使用 IDREF
【发布时间】:2019-08-15 01:55:31
【问题描述】:

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

我认为我可以指定一个标签的属性可以限制为另一个标签的属性,我认为可以使用!ATTLISTIDREF来完成,但我不太确定。示例:

<?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 标记的name 属性中具有相同的文本。
  • CMD-ID 标记有一个script 属性,必须SCRIPT 标记的name 属性中具有相同的文本。
  • 如果CMD_IDSPECpressed 属性为both,那么它不能有兄弟姐妹。
  • 如果CMD_IDSPECpressed 属性为truefalse,那么它必须有一个兄弟姐妹是falsetrue

我怎样才能做到这一点?

【问题讨论】:

    标签: xml dtd


    【解决方案1】:

    看起来它不能用 DTD 完成。我将不得不改用XSD

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多