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


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


<!ELEMENT entity (name, type, compilation, comment?, (parnames|parameters)?, author?, version?, date?, copyright?, license?, info*)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT type (#PCDATA)>

<!ELEMENT compilation (#PCDATA)>

<!ELEMENT comment (#PCDATA)>

<!ELEMENT parnames (#PCDATA)>

<!ELEMENT parameters (parameter*)>

<!ELEMENT parameter (name, description)>

<!ELEMENT description (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT version (#PCDATA)>

<!ELEMENT date (#PCDATA)>

<!ELEMENT license (#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?, (argnames|arguments)?, exceptions?, info*, examples?)>

<!ELEMENT meta (#PCDATA)>

<!ELEMENT mode (template, solutions)>

<!ELEMENT template (#PCDATA)>

<!ELEMENT solutions (#PCDATA)>

<!ELEMENT argnames (#PCDATA)>

<!ELEMENT arguments (argument*)>

<!ELEMENT argument (name, description)>

<!ELEMENT exceptions (exception*)>

<!ELEMENT exception (condition, term)>

<!ELEMENT condition (#PCDATA)>

<!ELEMENT term (#PCDATA)>

<!ELEMENT examples (example*)>

<!ELEMENT example (description, call, bindings)>

<!ELEMENT call (#PCDATA)>

<!ELEMENT bindings (#PCDATA)>

<!ELEMENT remarks (remark*)>

<!ELEMENT remark (topic, text)>

<!ELEMENT topic (#PCDATA)>

<!ELEMENT text (#PCDATA)>


<!ENTITY % custom SYSTEM "custom.ent">

%custom;