<!-- DTD for D-BUS Introspection data -->
<!-- (C) 2005-02-02 David A. Wheeler; released under the D-BUS licenses,
         GNU GPL version 2 (or greater) and AFL 1.1 (or greater) -->
<!-- I've added "raises" so the data can document error replies. -->
<!-- This includes a "deprecated" attribute for many elements, to
     document deprecation. Tools may auto-warn when a deprecated
     element is used. -->

<!-- TODO: support type definition -->
<!-- TODO: Compare to CORBA IDL to see what else should be stolen. -->
<!-- Note: documentation could be included using the XML comment format;
     is that sufficient? -->

<!ELEMENT node (interface,node)>
<!ATTLIST node name CDATA #REQUIRED>

<!ELEMENT interface (method,signal,property)>
<!ATTLIST interface name CDATA #REQUIRED> <!-- Use "" for unnamed interface -->
<!ATTLIST interface deprecated CDATA "no"> <!-- "yes" if deprecated -->

<!ELEMENT method (arg,raises)>
<!ATTLIST method name CDATA #REQUIRED>
<!ATTLIST method deprecated CDATA "no"> <!-- "yes" if deprecated -->

<!ELEMENT arg EMPTY>
<!ATTLIST arg name CDATA #REQUIRED>
<!ATTLIST arg type CDATA #REQUIRED>
<!-- Method arguments SHOULD include "direction",
     while signal and error arguments SHOULD not (since there's no point).
     The DTD format can't express that subtlety. -->
<!ATTLIST arg direction "in|out" #IMPLIED>

<!-- Element "raises" documents a possible error reply; note that
     an object may choose to raise something else NOT documented! -->
<!ELEMENT raises (arg)>
<!ATTLIST raises name CDATA #REQUIRED>
<!-- For properties, allow identification of WHEN it might be raised;
     don't use attribute onaccess unless it's for a property: -->
<!ATTLIST raises onaccess "read|write|readwrite" #IMPLIED>

<!ELEMENT signal (arg)>
<!ATTLIST signal name CDATA #REQUIRED>
<!ATTLIST signal deprecated CDATA "no"> <!-- "yes" if deprecated -->

<!ELEMENT property (raises)>  <!-- AKA "attribute" -->
<!ATTLIST property name CDATA #REQUIRED>
<!ATTLIST property type CDATA #REQUIRED>
<!ATTLIST property access "read|write|readwrite" #REQUIRED>
<!ATTLIST property deprecated CDATA "no"> <!-- "yes" if deprecated -->