<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	version="1.3">

<xsd:annotation>
	<xsd:documentation>
	XML Schema for Logtalk XML documentation files.
	</xsd:documentation>
</xsd:annotation>
 
<!-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  Logtalk - Object oriented extension to Prolog
%  Release 2.29.5
%
%  Copyright (c) 1998-2007 Paulo Moura.  All Rights Reserved.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-->


<xsd:element name="logtalk" type="logtalk"/>


<xsd:complexType name="logtalk">
	<xsd:sequence>
		<xsd:element name="entity"		type="entity"/>
		<xsd:element name="relations"	type="relations"/>
		<xsd:element name="predicates"	type="predicates"/>
		<xsd:element name="remarks"		type="remarks"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="entity">
	<xsd:sequence>
		<xsd:element name="name"		type="xsd:string"/>
		<xsd:element name="type"		type="type"/>
		<xsd:element name="compilation"	type="compilation"/>
		<xsd:element name="comment"		type="xsd:string"	minOccurs="0"/>
		<xsd:choice	minOccurs="0">
			<xsd:element name="parnames"	type="xsd:string"/>
			<xsd:element name="parameters"	type="parameters"/>
		</xsd:choice>
		<xsd:element name="author"		type="xsd:string"	minOccurs="0"/>
		<xsd:element name="version"		type="xsd:string"	minOccurs="0"/>
		<xsd:element name="date"		type="xsd:string"	minOccurs="0"/>
		<xsd:element name="copyright"	type="xsd:string"	minOccurs="0"/>
		<xsd:element name="license"		type="xsd:string"	minOccurs="0"/>
		<xsd:element name="info"		type="info"			minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:simpleType name="type">
	<xsd:restriction base="xsd:string">
		<xsd:enumeration value="category"/>
		<xsd:enumeration value="object"/>
		<xsd:enumeration value="protocol"/>
	</xsd:restriction>
</xsd:simpleType>


<xsd:simpleType name="compilation">
	<xsd:restriction base="xsd:string">
		<xsd:enumeration value="static"/>
		<xsd:enumeration value="dynamic"/>
	</xsd:restriction>
</xsd:simpleType>


<xsd:complexType name="parameters">
	<xsd:sequence>
		<xsd:element name="parameter"	type="parameter"	maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="parameter">
	<xsd:sequence>
		<xsd:element name="name"		type="xsd:string"/>
		<xsd:element name="description"	type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="info">
	<xsd:sequence>
		<xsd:element name="key"		type="xsd:string"/>
		<xsd:element name="value"	type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="relations">
	<xsd:sequence>
		<xsd:element name="implements"		type="relation"		minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="imports"			type="relation"		minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="extends"			type="relation"		minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="instantiates"	type="relation"		minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="specializes"		type="relation"		minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="uses"			type="docrelation"	minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="calls"			type="docrelation"	minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="relation">
	<xsd:sequence>
		<xsd:element name="name"	type="xsd:string"/>
		<xsd:element name="scope"	type="scope"/>
		<xsd:element name="file"	type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="docrelation">
	<xsd:sequence>
		<xsd:element name="name"	type="xsd:string"/>
		<xsd:element name="file"	type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:simpleType name="scope">
	<xsd:restriction base="xsd:string">
		<xsd:enumeration value="public"/>
		<xsd:enumeration value="protected"/>
		<xsd:enumeration value="private"/>
	</xsd:restriction>
</xsd:simpleType>


<xsd:complexType name="predicates">
	<xsd:sequence>
		<xsd:element name="public"		type="public"/>
		<xsd:element name="protected"	type="protected"/>
		<xsd:element name="private"		type="private"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="public">
	<xsd:sequence>
		<xsd:element name="predicate"	type="predicate"	minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="protected">
	<xsd:sequence>
		<xsd:element name="predicate"	type="predicate"	minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="private">
	<xsd:sequence>
		<xsd:element name="predicate"	type="predicate"	minOccurs="0" maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="predicate">
	<xsd:sequence>
		<xsd:element name="name"		type="xsd:string"/>
		<xsd:element name="scope"		type="scope"/>
		<xsd:element name="compilation"	type="compilation"/>
		<xsd:element name="meta"		type="xsd:string"		minOccurs="0"/>
		<xsd:element name="mode"		type="mode"				minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element name="comment"		type="xsd:string"		minOccurs="0"/>
		<xsd:element name="template"	type="xsd:string"		minOccurs="0" maxOccurs="unbounded"/>
		<xsd:choice	minOccurs="0">
			<xsd:element name="argnames"	type="xsd:string"/>
			<xsd:element name="arguments"	type="arguments"/>
		</xsd:choice>
		<xsd:element name="exceptions"	type="exceptions"		minOccurs="0"/>
		<xsd:element name="info"		type="info"				minOccurs="0"/>
		<xsd:element name="examples"	type="examples"			minOccurs="0"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="mode">
	<xsd:sequence>
		<xsd:element name="template"	type="xsd:string"/>
		<xsd:element name="solutions"	type="solutions"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:simpleType name="solutions">
	<xsd:restriction base="xsd:string">
		<xsd:enumeration value="zero"/>
		<xsd:enumeration value="zero_or_one"/>
		<xsd:enumeration value="zero_or_more"/>
		<xsd:enumeration value="one"/>
		<xsd:enumeration value="one_or_more"/>
		<xsd:enumeration value="error"/>
	</xsd:restriction>
</xsd:simpleType>


<xsd:complexType name="arguments">
	<xsd:sequence>
		<xsd:element name="argument"	type="argument"	maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="argument">
	<xsd:sequence>
		<xsd:element name="name"		type="xsd:string"/>
		<xsd:element name="description"	type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="exceptions">
	<xsd:sequence>
		<xsd:element name="exception"	type="exception"	maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="exception">
	<xsd:sequence>
		<xsd:element name="condition"	type="xsd:string"/>
		<xsd:element name="term"		type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="examples">
	<xsd:sequence>
		<xsd:element name="example"	type="example"	minOccurs="0"	maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="example">
	<xsd:sequence>
		<xsd:element name="description"	type="xsd:string"/>
		<xsd:element name="call"		type="xsd:string"/>
		<xsd:element name="bindings"	type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="remarks">
	<xsd:sequence>
		<xsd:element name="remark"	type="remark"	minOccurs="0"	maxOccurs="unbounded"/>
	</xsd:sequence>
</xsd:complexType>


<xsd:complexType name="remark">
	<xsd:sequence>
		<xsd:element name="topic"	type="xsd:string"/>
		<xsd:element name="text"	type="xsd:string"/>
	</xsd:sequence>
</xsd:complexType>


</xsd:schema>