<!-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  Logtalk - Object oriented extension to Prolog
%  Release 2.23.1
%
%  Copyright (c) 1998-2005 Paulo Moura.  All Rights Reserved.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-->


<!ELEMENT logtalk (entity, relations, predicates)>


<!ELEMENT entity (name, type, compilation, comment?, author?, version?, date?, info*)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT type (#PCDATA)>

<!ELEMENT compilation (#PCDATA)>

<!ELEMENT comment (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT version (#PCDATA)>

<!ELEMENT date (#PCDATA)>

<!ELEMENT info (key, value)>


<!ELEMENT key (#PCDATA)>

<!ELEMENT value (#PCDATA)>


<!ELEMENT relations (implements*, imports*, extends*, instantiates*, specializes*, uses*, calls*)>

<!ELEMENT implements (name, scope, file)>

<!ELEMENT imports (name, scope, file)>

<!ELEMENT extends (name, scope, file)>

<!ELEMENT instantiates (name, scope, file)>

<!ELEMENT specializes (name, scope, file)>

<!ELEMENT uses (name, file)>

<!ELEMENT calls (name, file)>


<!ELEMENT scope (#PCDATA)>

<!ELEMENT file (#PCDATA)>


<!ELEMENT predicates (public, protected, private)>


<!ELEMENT public (predicate*)>

<!ELEMENT protected (predicate*)>

<!ELEMENT private (predicate*)>


<!ELEMENT predicate (name, scope, compilation, meta?, mode*, comment?, template?, exceptions?, info*)>

<!ELEMENT meta (#PCDATA)>

<!ELEMENT mode (template, solutions)>

<!ELEMENT template (#PCDATA)>

<!ELEMENT solutions (#PCDATA)>

<!ELEMENT exceptions (exception*)>

<!ELEMENT exception (condition, term)>

<!ELEMENT condition (#PCDATA)>

<!ELEMENT term (#PCDATA)>