Knowledge Query and Manipulation Language
Bei der Knowledge Query and Manipulation Language (KQML) handelt es sich nach Murch und Johnson um eine Programmiersprache und ein Protokoll zum Wissensaustausch. Sie baut auf SGML, dem Vorläufer von XML, auf und wurde 1993 als Standard vorgeschlagen. Die KQML unterstützt die Netzwerkprogrammierung, die im Rahmen der Agententechnologie für wissensbasierte Systeme und intelligente Agenten eingesetzt wird. Damit wird versucht eine Kollektive Intelligenz oder Schwarmintelligenz analog zu unserem Gehirn oder dem Internet aufzubauen.
KQML verfolgt ähnliche Ziele wie CORBA, Java-RMI und andere Plattformen zum verteilten Rechnen.
KQML wurde durch die Knowledge-Sharing-Effort-Initiative der ARPA (heute DARPA) unterstützt.
KQML lehnt sich an die Theorie der Sprechakte an, um Typen von Nachrichten zu klassifizieren. In der KQML Terminologie heißen die verschiedenen Ausprägungen Performatives. Der Standard definiert 36 verschiedene Typen von Performatives, z. B. Anfragen, Zusagen, Absagen etc. Eine KQML Nachricht wird auch KQML-Paket genannt. Neben dem verwendeten Performative enthält ein Paket den eigentlichen Inhalt, die Namen des Absenders und des Empfängers, sowie die Angabe der Sprache des Inhalts und einer Ontologie. Der eigentliche Inhalt des Pakets kann in diversen Sprachen, z. B. Prolog, KIF oder auch KQML selber, verfasst sein. Die Sprache wird mit angegeben, damit der Empfänger weiß, wie die Daten zu interpretieren sind, bzw. ob er die Daten interpretieren kann. Die Angabe einer Ontologie, also eines bestimmten Wissensgebiets, in dessen Vokabular die Nachricht zu interpretieren ist, soll eventuelle Zweideutigkeiten auflösen. Der allgemeine Aufbau eines KQML-Pakets ergibt sich zu:
(<Performative> :content <speechact> :sender <name> :receiver <name> :language <text> :ontology <text> )
Im folgenden Beispiel erfragt Agent A bei Agent B die URL der Wikipedia:
(ask-one :content adresse(„Wikipedia“, X) :sender A :receiver B :language Prolog :ontology Webseiten )
Agent B antwortet mit:
(tell :content adresse(„Wikipedia“, „de.wikipedia.org“) :sender B :receiver A :language Prolog :ontology Webseiten )
In diesem Beispiel ist die Angabe der Ontologie wichtig, da der Fakt adresse evtl. mehrdeutig sein kann; hätte die Wikipedia eine Postanschrift, so könnte Agent A ja auch diese angefordert haben. Durch die Angabe einer Ontologie werden derartige Missverständnisse vermieden.