如何使用 IDREF
How to use IDREF
我正在编写一份 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>
我想说明:
BUTTON
标签必须有一个属性 name
, 必须 在 CMD_ID
标签的 name
属性。
CMD-ID
标签有一个 script
属性, 必须 在 SCRIPT
标签的 name
属性。
- 如果
CMD_ID
的 SPEC
具有 both
的 pressed
属性,那么它 不能有一个兄弟姐妹。
- 如果
CMD_ID
的 SPEC
具有 true
或 false
的 pressed
属性,则它 必须 有一个 false
或 true
. 的兄弟姐妹
我怎样才能做到这一点?
看来这不能用 DTD 来完成。我将不得不使用 XSD 代替。
我正在编写一份 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>
我想说明:
BUTTON
标签必须有一个属性name
, 必须 在CMD_ID
标签的name
属性。CMD-ID
标签有一个script
属性, 必须 在SCRIPT
标签的name
属性。- 如果
CMD_ID
的SPEC
具有both
的pressed
属性,那么它 不能有一个兄弟姐妹。 - 如果
CMD_ID
的SPEC
具有true
或false
的pressed
属性,则它 必须 有一个false
或true
. 的兄弟姐妹
我怎样才能做到这一点?
看来这不能用 DTD 来完成。我将不得不使用 XSD 代替。