2015-02-02 4 views
2

Я пишу XML-документ и пытаюсь также указать его спецификацию.Как использовать IDREF

Я думаю, что я могу указать, что атрибут тега может быть ограничен атрибутом другого тега, и я думаю, что это можно сделать с помощью !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_ID «s SPEC имеет pressed атрибут both, то не может иметь брата.
  • Если CMD_ID «s SPEC имеет pressed атрибут true или false, то обязательно есть родственный, которое false или true.

Как это сделать?

ответ

0

Похоже, я не могу это сделать с DTD. Вместо этого я должен пойти с XSD.

Смежные вопросы