Quick links: Tutorial - Examples - Files - Symbols.
Classes: Hierarchy - Index - List - Members.
Namespaces: Index - base - cs - display.
This page is available in English.

Format CoGXML

Introduction

Le langage XML (eXtensible Markup Language) est un langage de représentation de données adapté pour représenter des données structurées. Un document XML est comme une arborescence d'objets, ayant des attributs et contenant éventuellement du texte. Il peut être de deux catégories : valide et bien formé. La vailidité se rapporte à la dépendance d'une DTD (Document Type Definition). Une DTD est utilisée pour décrire la structure et le type de balises utilisés dans un document XML, qui, pour être déclaré valide, devra respecter la définition donnée dans la DTD.
Le format CoGXML permet de représenter des graphes conceptuels sous la forme de documents XML. La DTD qui a été définie permet la représentation de supports (ensemble partiellement ordonné des types de concepts, des types de relations, des types d'emboîtements, signatures des types de relation et relation de conformité), de graphes (connexes ou non connexes, simples ou emboîtés) et de règles.
Le format CoGXML était appelé CGXML dans les précédentes versions de Cogitant. Ce format a été établi parallèlement à un autre format qui permet de représenter des graphes conceptuels sous la forme de documents XML, et ce format s'appelle aussi CGXML (http://tockit.sourceforge.net/cgxml/). Or, ces deux formats sont différents, et les opérations de lecture/écriture sont incompatibles. Afin d'éviter toute confusion, le format CGXML "de Cogitant" a donc été renommé en CoGXML.

Forme générale d'un fichier CoGXML

Comme tout fichier XML, un fichier CoGXML comporte une entête de déclaration de version XML et de la DTD associée. Vient ensuite, dans tout fichier CoGXML, la balise <CoGXML>. À l'intérieur de cette balise, figurent les déclarations propres aux supports, aux graphes et aux règles. Le fichier se termine par la fin de balise </CoGXML>.

<?xml version="1.0"?>
<!DOCTYPE cogxml PUBLIC "-//COGITANT//CoGXML Format Specification 1.3//EN" "http://cogitant.sourceforge.net/cogxml.dtd">
<cogxml>
.../...
</cogxml>

Les objets du modèle sont représentés par différentes balises et attributs. Le format CoGXML offre la possibilité de repérer certaines informations sur les objets (par exemple : type de concept, type de relation, type d'emboîtement) sous la forme du libellé explicite de l'objet ou sous la forme d'un identificateur. Par exemple (voir ci-dessous), pour la description des objets liés aux types de concepts, on peut décrire la relation d'ordre entre les types de concepts soit par un ensemble de balises order ayant les attributs id1 et id2 (identificateurs des types de concepts), soit par un ensemble de balises order ayant les attributs label1 et label2, ces derniers désignant les types de concepts par leur libellé complet.

<order id1="c1" id2="c0"/>
<order label1="Action" label2="T"/>

Comme dans tout fichier XML, des entités prédéfinies permettent de représenter des caractères spéciaux sous une forme particulière afin qu'ils ne soient pas confondus avec les caractères de balisage. Ainsi les caractères & < > ' et " doivent être représentés (respectivement) par &amp; &lt; &gt; &apos; et &quot;.

Forme CoGXML d'un support

Un support est composé d'un ensemble partiellement ordonné de types de concepts, un ensemble partiellement ordonné de types de relations, un ensemble partiellement ordonné de types d'emboîtements, des signatures des types de relation et de la relation de conformité.

<!DOCTYPE cogxml PUBLIC "-//COGITANT//CoGXML Format Specification 1.3//EN" "http://cogitant.sourceforge.net/cogxml.dtd">

Un système pouvant être amené à manipuler plusieurs supports, un identificateur est donné au support au travers de l'attribut name.

<support name="Bucolic">

Forme CoGXML de l'ensemble partiellement ordonné des types de concepts

L'ensemble partiellement ordonné des types de concepts est représenté par l'élément conceptTypes incluant les éléments ctype et order. Les éléments ctype décrivent les identificateurs et les libellés de tous les types de concepts présents dans l'ensemble. Cet élément contient les attributs id (identificateur dans le fichier CoGXML) et label (intitulé du type de concept). De façon optionnelle, l'élément ctype peut contenir des éléments translation afin de stocker les traductions de l'intitulé du type de concept dans différentes langues, dans ce cas, chaque élément translation doit contenir un attribut lang représentant l'identifiant de la langue, et un attribut label donnant la traduction dans la langue en question. L'attribut optionnel descr de translation permet de donner une description du type dans la langue en question.
Les éléments order permettent de définir la relation d'ordre entre les types de concepts par spécification de couples dont le premier élément est inférieur au second. Les éléments order sont facultatifs : ils sont absents dans le cas d'un ensemble dans lequel tous les éléments sont incomparables. Chaque élément order est renseigné avec les attributs id1 et id2 (identificateurs de types de concepts) ou les attributs label1 et label2 (intitulés de types de concepts).

<conceptTypes>
<ctype id="c0" label="Universal"/>
<ctype id="c1" label="Action"/>
<ctype id="c2" label="Attribute">
<translation lang="fr" label="Attribut"/>
</ctype>
<ctype id="c3" label="Boat">
<translation lang="fr" label="Bateau"/>
</ctype>
<ctype id="c4" label="Bucolic">
<translation lang="fr" label="Bucolique"/>
</ctype>
<ctype id="c5" label="Couple"/>
<ctype id="c6" label="Entity">
<translation lang="fr" label="Entité"/>
</ctype>
<ctype id="c7" label="Fish">
<translation lang="fr" label="Pêcher"/>
</ctype>
<ctype id="c8" label="Lake">
<translation lang="fr" label="Lac"/>
</ctype>
<ctype id="c9" label="Living being">
<translation lang="fr" label="Être vivant"/>
</ctype>
<ctype id="c10" label="Painting">
<translation lang="fr" label="Tableau"/>
</ctype>
<ctype id="pers" label="Person">
<translation lang="fr" label="Personne"/>
</ctype>
<ctype id="c12" label="Place">
<translation lang="fr" label="Lieu"/>
</ctype>
<ctype id="c13" label="Scene">
<translation lang="fr" label="Scène"/>
</ctype>
<ctype id="c14" label="Sleep">
<translation lang="fr" label="Dormir"/>
</ctype>
<ctype id="c15" label="Think">
<translation lang="fr" label="Penser"/>
</ctype>
<ctype id="c16" label="Truit">
<translation lang="fr" label="Truite"/>
</ctype>
<order id1="c1" id2="c0"/>
<order id1="c2" id2="c0"/>
<order id1="c6" id2="c0"/>
<order id1="c15" id2="c1"/>
<order id1="c14" id2="c1"/>
<order id1="c7" id2="c1"/>
<order id1="c4" id2="c2"/>
<order id1="c13" id2="c6"/>
<order id1="c5" id2="c6"/>
<order id1="c3" id2="c6"/>
<order id1="c12" id2="c6"/>
<order id1="c10" id2="c6"/>
<order id1="c9" id2="c6"/>
<order id1="pers" id2="c9"/>
<order id1="c16" id2="c9"/>
<order id1="c8" id2="c12"/>
</conceptTypes>

Dans un même fichier, tous les éléments order doivent être définis de la même façon.

<conceptTypes>
<ctype id="c0" label="Universal"/>
<ctype id="c1" label="Action"/>
<ctype id="c2" label="Attribute">
<translation lang="fr" label="Attribut"/>
</ctype>
<ctype id="c3" label="Boat">
<translation lang="fr" label="Bateau"/>
</ctype>
<ctype id="c4" label="Bucolic">
<translation lang="fr" label="Bucolique"/>
</ctype>
<ctype id="c5" label="Couple"/>
<ctype id="c6" label="Entity">
<translation lang="fr" label="Entité"/>
</ctype>
<ctype id="c7" label="Fish">
<translation lang="fr" label="Pêcher"/>
</ctype>
<ctype id="c8" label="Lake">
<translation lang="fr" label="Lac"/>
</ctype>
<ctype id="c9" label="Living being">
<translation lang="fr" label="Être vivant"/>
</ctype>
<ctype id="c10" label="Painting">
<translation lang="fr" label="Tableau"/>
</ctype>
<ctype id="pers" label="Person">
<translation lang="fr" label="Personne"/>
</ctype>
<ctype id="c12" label="Place">
<translation lang="fr" label="Lieu"/>
</ctype>
<ctype id="c13" label="Scene">
<translation lang="fr" label="Scène"/>
</ctype>
<ctype id="c14" label="Sleep">
<translation lang="fr" label="Dormir"/>
</ctype>
<ctype id="c15" label="Think">
<translation lang="fr" label="Penser"/>
</ctype>
<ctype id="c16" label="Truit">
<translation lang="fr" label="Truite"/>
</ctype>
<order label1="Action" label2="Universal"/>
<order label1="Attribute" label2="Universal"/>
<order label1="Entity" label2="Universal"/>
<order label1="Think" label2="Action"/>
<order label1="Sleep" label2="Action"/>
<order label1="Fish" label2="Action"/>
<order label1="Bucolic" label2="Attribute"/>
<order label1="Scene" label2="Entity"/>
<order label1="Couple" label2="Entity"/>
<order label1="Boat" label2="Entity"/>
<order label1="Place" label2="Entity"/>
<order label1="Painting" label2="Entity"/>
<order label1="Living being" label2="Entity"/>
<order label1="Person" label2="Living being"/>
<order label1="Truit" label2="Living being"/>
<order label1="Lake" label2="Place"/>
</conceptTypes>

Forme CoGXML de l'ensemble partiellement ordonné des types de relations

L'ensemble partiellement ordonné des types de relations est représenté par la balise relationTypes incluant les balises rtype et order. Chaque balise rtype décrit l'identificateur et l'intitulé d'un type de relation présents dans l'ensemble ainsi que sa signature (optionnelle). La propriété signature peut être décrite soit par l'attribut idSignature soit par l'attribut labelSignature. Un ensemble de balises type ne peut avoir à la fois des attributs idSignature et des attributs labelSignature. La balise rtype contient aussi les attributs id et label. Les traductions dans différentes langues peuvent être représentées de la même façon que dans le cas d'un type de concept à l'aide d'éléments translation.
Les balises order permettent de définir la relation d'ordre entre les types de relations par spécification de couples dont le premier élément est inférieur au second. Ces balises sont facultatives : elles sont absentes dans le cas d'un ensemble dans lequel tous les éléments sont incomparables.

<relationTypes>
<rtype id="r0" label="agent" idSignature="c1 c9"/>
<rtype id="r1" label="attr" idSignature="c6 c2"/>
<rtype id="r2" label="in" idSignature="c6 c12">
<translation lang="fr" label="dans"/>
</rtype>
<rtype id="r3" label="object" idSignature="c1 c6">
<translation lang="fr" label="objet"/>
</rtype>
<rtype id="r4" label="on" idSignature="c6 c12">
<translation lang="fr" label="sur"/>
</rtype>
<rtype id="r5" label="weight" idSignature="c6 float">
<translation lang="fr" label="poids"/>
</rtype>
<rtype id="r6" label="name" idSignature="c6 string">
<translation lang="fr" label="nom"/>
</rtype>
<rtype id="r7" label="age" idSignature="c9 integer">
<translation lang="fr" label="age"/>
</rtype>
<rtype id="r8" label="loc" idSignature="c1 c12">
<translation lang="fr" label="lieu"/>
</rtype>
<rtype id="r9" label="desc" idSignature="c0 literal"/>
</relationTypes>

Dans un même fichier, toutes les balises order doivent être définies de la même façon.

<relationTypes>
<rtype id="r0" label="agent" labelSignature="Action Living\ being"/>
<rtype id="r1" label="attr" labelSignature="Entity Attribute"/>
<rtype id="r2" label="in" labelSignature="Entity Place">
<translation lang="fr" label="dans"/>
</rtype>
<rtype id="r3" label="object" labelSignature="Action Entity">
<translation lang="fr" label="objet"/>
</rtype>
<rtype id="r4" label="on" labelSignature="Entity Place">
<translation lang="fr" label="sur"/>
</rtype>
<rtype id="r5" label="weight" labelSignature="Entity float">
<translation lang="fr" label="poids"/>
</rtype>
<rtype id="r6" label="name" labelSignature="Entity string">
<translation lang="fr" label="nom"/>
</rtype>
<rtype id="r7" label="age" labelSignature="Living\ being integer">
<translation lang="fr" label="age"/>
</rtype>
<rtype id="r8" label="loc" labelSignature="Action Place">
<translation lang="fr" label="lieu"/>
</rtype>
<rtype id="r9" label="desc" labelSignature="Universal literal">
</rtype>
</relationTypes>

Dans le cas de la définition de la signature d'un type de relation par les intitulés des types de concepts (attribut labelSignature), si un intitulé de type de concept contient un ou plusieurs caractères blancs, ceux-ci devront être précédés d'un antislash. En effet, le caractère blanc étant utilisé pour séparer les différents intitulés des types de concepts dans la valeur de l'attribut labelSignature, il était nécessaire de prévoir un caractère d'échappement pour représenter le caractère blanc à l'interieur d'un intitulé de type de concept. Évidemment, toute occurrence du caractère antislash devra elle aussi être protégée par le caractère d'échappement antislash. Dans le cas où certains types de la signature sont conjonctifs, les types primitifs composant le type conjonctif sont séparés par le caractère ;.

<rtype id="r0" label="agent" labelSignature="Action Living\ being"/>

Forme CoGXML de l'ensemble partiellement ordonné des types d'emboîtements

L'ensemble partiellement ordonné des types d'emboîtements est représenté par la balise nestingTypes incluant les balises ntype et order. Les balises ntype décrivent les identificateurs et intitulés des types d'emboîtements présents dans l'ensemble. Cette balise contient les attributs id et label. La représentation des traductions se fait de la même façon que pour les autres ensembles de types du support. Les balises order permettent de définir la relation d'ordre entre les types d'emboîtements par spécification de couples dont le premier élément est inférieur au second. Les balises order sont facultatives : elles sont absentes dans le cas d'un ensemble dans lequel tous les éléments sont incomparables. Chaque balise order est renseignée avec les attributs id1 et id2 ou les attributs label1 et label2. Dans un même fichier, toutes les balises order doivent être définies de la même façon.

<nestingTypes>
<ntype id="n0" label="Description"/>
<ntype id="n1" label="Component">
<translation lang="fr" label="Composant"/>
</ntype>
<ntype id="n2" label="Representation">
<translation lang="fr" label="Représentation"/>
</ntype>
<order id1="n1" id2="n0"/>
<order id1="n2" id2="n0"/>
</nestingTypes>

Dans un même fichier, toutes les balises order doivent être définies de la même façon.

<nestingTypes>
<ntype id="n0" label="Description"/>
<ntype id="n1" label="Component">
<translation lang="fr" label="Composant"/>
</ntype>
<ntype id="n2" label="Representation">
<translation lang="fr" label="Représentation"/>
</ntype>
<order label1="Component" label2="Description"/>
<order label1="Representation" label2="Description"/>
</nestingTypes>

Forme CoGXML de la relation de conformité

La relation de conformité est représentée par des couples marqueur individuel, identificateur de type de concept signifiant qu'un marqueur a pour type de concept minimum le type de concept spécifié.
La balise marker présente les attributs id, label ainsi que idType ou labelType suivant le type de représentation choisi. Les attributs idType et labelType sont optionnels, ce qui permet de déclarer un marqueur individuel qui n'est lié à aucun type de concept. Si une telle déclaration n'est pas conforme au modèle, il peut être utile de ne pas préciser le type d'un marqueur individuel dans une phase de constuction du support.

<conformity>
<marker id="m0" label="Peter" idType="pers">
<translation lang="fr" label="Pierre"/>
</marker>
<marker id="m1" label="A" idType="c10"/>
<marker id="m2" label="Parker" idType="pers"/>
<marker id="m3" label="B" idType="c10"/>
</conformity>

<conformity>
<marker id="m0" label="Peter" labelType="Person">
<translation lang="fr" label="Pierre"/>
</marker>
<marker id="m1" label="A" labelType="Painting"/>
<marker id="m2" label="Parker" labelType="Person"/>
<marker id="m3" label="B" labelType="Painting"/>
</conformity>

Forme CoGXML d'un graphe

Un graphe est composé d'un ensemble de sommets concepts, de sommets relations et d'arêtes liant les sommets relations aux sommets concepts.

<?xml version="1.0"?>
<!DOCTYPE cogxml PUBLIC "-//COGITANT//CoGXML Format Specification 1.1//EN" "http://cogitant.sourceforge.net/cogxml.dtd">
<cogxml>

Afin de distinguer les différents sommets, un identificateur unique doit être attribué à chacun d'eux. Cette attribution peut être faite manuellement par une personne saisissant des graphes, ou automatiquement par une application sauvegardant ou communiquant des graphes.
Un identificateur est donné au graphe par l'attribut id. Deux autres critères optionnels sont à disposition : l'attribut nature pour la nature du graphe et l'attribut set qui permet de regrouper les graphes par familles ou par thèmes.

<graph id="g12" nature="fact" set="example">

Sommets concepts d'un graphe

Les sommets concepts d'un graphe conceptuel sont représentés par les balises concept décrivant les attributs :

<concept id="cn13" idType="pers" coreferenceClass="x1"></concept>
<concept id="cn14" idType="c14"></concept>
<concept id="cn15" idType="pers"></concept>
<concept id="cn16" idType="c7"></concept>
<concept id="cn17" idType="c8"></concept>

Pour la représentation de graphes emboîtés typés, il est nécessaire de représenter la liste des emboîtements contenus dans un sommet concept sous la forme de couples (type d'emboîtement, identificateur du graphe emboîté). La balise nesting avec les attributs idType ou labelType (identificateur ou intitulé du type d'emboîtement) et nestGraph (identificateur du graphe emboîté) permet de décrire le type d'emboîtement et le graphe emboîté. La définition du graphe emboîté doit précéder l'utilisation de son identificateur signifiant que le graphe est emboîté dans un sommet concept d'un autre graphe.

<concept id="cn10" idType="c5">
<nesting idType="n1" nestGraph="g12"/>
</concept>

Sommets relations d'un graphe

Les sommets relations d'un graphe conceptuel sont représentés par des balises relation décrivant les attributs :

<relation id="rn18" idType="r0"/>
<relation id="rn19" idType="r0"/>
<relation id="rn20" idType="r2"/>

Ensemble d'arêtes

Les arêtes liant les sommets relations aux sommets concepts d'un graphe conceptuel sont représentées par des balises edge décrivant les attributs :

<edge label="1" rid="rn18" cid="cn14"/>
<edge label="2" rid="rn18" cid="cn13"/>
<edge label="1" rid="rn19" cid="cn16"/>
<edge label="2" rid="rn19" cid="cn15"/>
<edge label="1" rid="rn20" cid="cn16"/>
<edge label="2" rid="rn20" cid="cn17"/>

Forme CoGXML d'une règle

Une règle de graphes conceptuels est représentée par une balise rule. Chaque règle est repérée par un identificateur donné par l'attribut id.

<?xml version="1.0"?>
<!DOCTYPE cogxml PUBLIC "-//COGITANT//CoGXML Format Specification 1.1//EN" "http://cogitant.sourceforge.net/cogxml.dtd">
<cogxml>
<rule id="regle1">

La règle est définie en trois parties : le graphe hypothèse, le graphe conclusion et les liens entre ces deux graphes (points d'attache).
L'hypothèse est désignée par la balise hypt. Celle-ci encadre une description de graphe avec balises adéquates.

<hypt>
<graph id="hypothese">
<concept id="cn1" idType="c9"></concept>
<concept id="cn2" idType="c9"></concept>
<concept id="cn3" idType="c9"></concept>
<relation id="rn4" idType="r9"/>
<relation id="rn5" idType="r9"/>
<edge label="1" rid="rn4" cid="cn1"/>
<edge label="2" rid="rn4" cid="cn2"/>
<edge label="1" rid="rn5" cid="cn2"/>
<edge label="2" rid="rn5" cid="cn3"/>
</graph>
</hypt>

La conclusion est décrite par la balise conc encadrant, elle aussi, une description de graphe avec balises adéquates.

<conc>
<graph id="conclusion">
<concept id="cn1" idType="c9"></concept>
<concept id="cn2" idType="c9"></concept>
<relation id="rn3" idType="r4"/>
<edge label="1" rid="rn3" cid="cn1"/>
<edge label="2" rid="rn3" cid="cn2"/>
</graph>
</conc>

La troisième partie désigne les points d'attache. Elle est repérée par la balise conPts encadrant des balises couple. Il s'agit d'une liste de couples d'identificateurs de sommets (concepts génériques) dans lequel le premier identificateur présenté par l'attribut idC1 repère un sommet du graphe hypothèse et le second présenté par l'attribut idC2, un sommet du graphe conclusion. Ces couples de sommets repèrent les points d'attache de la règle.

<conPts>
<couple idC1="cn1" idC2="cn1"/>
<couple idC1="cn3" idC2="cn2"/>
</conPts>

Règle et graphes emboîtés

L'hypothèse et/ou la conclusion d'une règle peut contenir des graphes emboîtés. Dans ce cas, le graphe de niveau 0 doit être le dernier déclaré dans la partie hypothèse et dans la partie conclusion. La règle ci-dessous (samples/xml/bucolic/nestedrule.xml) peut être interprétée de la façon suivante : Si un tableau x représente une scène qui peut être décrite par une entité composée d'une personne y qui dort, alors le tableau x est bucolique et la personne y pense. Remarquer que dans la section Hypt: comme dans la partie Concl:, le dernier graphe déclaré est celui contenant le tableau. Remarquer aussi la section ConnectionPoints qui contient des couples d'identificateurs de sommets, qui doivent être cohérents avec la structure des graphes hypothèse et conclusion.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cogxml PUBLIC "-//COGITANT//CoGXML Format Specification 1.3//EN" "http://cogitant.sourceforge.net/cogxml.dtd">
<cogxml app="cogitant 5.1.91">
<rule id="nrule">
<hypt>
<graph id="hy1">
<concept id="cn10" idType="c11"/>
<concept id="cn11" idType="c14"/>
<relation id="rn12" idType="r0"/>
<edge label="1" rid="rn12" cid="cn11"/>
<edge label="2" rid="rn12" cid="cn10"/>
</graph>
<graph id="hy2">
<concept id="cn7" idType="c6">
<nesting idType="n1" nestGraph="hy1"/>
</concept>
</graph>
<graph id="hy3">
<concept id="cn4" idType="c13">
<nesting idType="n0" nestGraph="hy2"/>
</concept>
</graph>
<graph id="hy4">
<concept id="cn1" idType="c10">
<nesting idType="n2" nestGraph="hy3"/>
</concept>
</graph>
</hypt>
<conc>
<graph id="co1">
<concept id="cn10" idType="c11"/>
<concept id="cn11" idType="c15"/>
<relation id="rn12" idType="r0"/>
<edge label="1" rid="rn12" cid="cn11"/>
<edge label="2" rid="rn12" cid="cn10"/>
</graph>
<graph id="co2">
<concept id="cn7" idType="c6">
<nesting idType="n1" nestGraph="co1"/>
</concept>
</graph>
<graph id="co3">
<concept id="cn4" idType="c13">
<nesting idType="n0" nestGraph="co2"/>
</concept>
</graph>
<graph id="co4">
<concept id="cn1" idType="c10">
<nesting idType="n2" nestGraph="co3"/>
</concept>
<concept id="cn13" idType="c4"/>
<relation id="rn14" idType="r1"/>
<edge label="1" rid="rn14" cid="cn1"/>
<edge label="2" rid="rn14" cid="cn13"/>
</graph>
</conc>
<conPts>
<couple idC1="cn10" idC2="cn10"/>
<couple idC1="cn1" idC2="cn1"/>
</conPts>
</rule>
</cogxml>

DTD CoGXML

Pour se référer à la DTD CoGXML lors de la création de fichiers à ce format, utiliser la syntaxe suivante :

<!DOCTYPE CoGXML PUBLIC "-//COGITANT//CoGXML Format Specification 1.4//EN" "http://cogitant.sourceforge.net/cogxml.dtd">

La dernière version de la DTD peut être retrouvée à l'URL : http://cogitant.sourceforge.net/cogxml.dtd
Le format est défini de la façon suivante :

<?xml version="1.0" encoding="UTF-8"?>

<!-- 

DTD CoGXML 1.5

This DTD allow representation of a support, representation of a conceptual graph and representation of graph rules.

To apply this DTD, use the following syntax:
<!DOCTYPE CoGXML PUBLIC "-//COGITANT//CoGXML Format Specification 1.4//EN" "http://cogitant.sourceforge.net/cogxml.dtd">

This file is part of Cogitant which is a library facilitating construction of applications using conceptual graphs.  It is under GPL licence.
http://cogitant.sourceforge.net
Cogitant version 5.2.91 - Last change of the DTD : 2011-04-18

-->

<!-- Attribute Extensions of standard tags. -->

<!ENTITY % cogxmlExtensions "">

<!ENTITY % supportExtensions "">
<!ENTITY % conceptTypesExtensions "">
<!ENTITY % relationTypesExtensions "">
<!ENTITY % nestingTypesExtensions "">
<!ENTITY % conformityExtensions "">
<!ENTITY % bannedTypesExtensions "">
<!ENTITY % allBannedExtensions "">
<!ENTITY % supportObjectExtensions "">
<!ENTITY % ctypeExtensions "">
<!ENTITY % rtypeExtensions "">
<!ENTITY % ntypeExtensions "">
<!ENTITY % markerExtensions "">
<!ENTITY % orderExtensions "">
<!ENTITY % bannedTypeExtensions "">
<!ENTITY % modulesExtensions "">
<!ENTITY % moduleExtensions "">

<!ENTITY % graphExtensions "">
<!ENTITY % environmentObjectExtensions "">
<!ENTITY % nodeExtensions "">
<!ENTITY % conceptExtensions "">
<!ENTITY % nestingExtensions "">
<!ENTITY % relationExtensions "">
<!ENTITY % edgeExtensions "">

<!ENTITY % ruleExtensions "">
<!ENTITY % positiveConstraintExtensions "">
<!ENTITY % negativeConstraintExtensions "">
<!ENTITY % conPtsExtensions "">
<!ENTITY % coupleExtensions "">

<!ENTITY % subPropExtensions "">


<!-- Document. -->

<!ELEMENT cogxml (support?, (graph | rule | positiveConstraint | negativeConstraint)*)>
<!ATTLIST cogxml
	app CDATA #IMPLIED
	%cogxmlExtensions;
>


<!-- Additional properties for each object of the model -->

<!ELEMENT subprop EMPTY>
<!ATTLIST subprop
	subid CDATA #REQUIRED
	%subPropExtensions;
>


<!-- Translation of an objet of the model. -->

<!ELEMENT translation EMPTY>
<!ATTLIST translation
	lang CDATA #REQUIRED
	label CDATA #REQUIRED
	descr CDATA #IMPLIED
>

<!-- Support.
	Add Attribute: if set to true, elements of the support are added to the
	previously loaded support. 
	If set to false (or not set at all), the elements of the support replace
	all previously loaded elements.-->
	
<!ELEMENT support (conceptTypes, relationTypes?, nestingTypes?, conformity?, bannedTypes?, modules?, subprop*)>
<!ATTLIST support
	name CDATA #IMPLIED
	add (true|false) "false"
	%supportExtensions;
>

<!ELEMENT conceptTypes (ctype*, order*)>
<!ATTLIST conceptTypes
	%conceptTypesExtensions;
>

<!ELEMENT ctype (translation*, subprop*)>
<!ATTLIST ctype
	id ID #IMPLIED
	label CDATA #REQUIRED
	%supportObjectExtensions;
	%ctypeExtensions;
>

<!ELEMENT order EMPTY>
<!ATTLIST order
	id1 IDREF #IMPLIED
	id2 IDREF #IMPLIED 
	label1 CDATA #IMPLIED 
	label2 CDATA #IMPLIED
>

<!ELEMENT relationTypes (rtype*, order*)>
<!ATTLIST relationTypes
	%relationTypesExtensions;
>

<!ELEMENT rtype (translation*, subprop*)>
<!ATTLIST rtype
	id ID #IMPLIED
	label CDATA #REQUIRED 
	idSignature CDATA #IMPLIED
	labelSignature CDATA #IMPLIED
	%supportObjectExtensions;
	%rtypeExtensions;
>

<!ELEMENT nestingTypes (ntype*, order*)>
<!ATTLIST nestingTypes
	%nestingTypesExtensions;
>

<!ELEMENT ntype (translation*, subprop*)>
<!ATTLIST ntype
	id ID #IMPLIED
	label CDATA #REQUIRED
	%supportObjectExtensions;
	%ntypeExtensions;
>

<!ELEMENT conformity (marker*)>
<!ATTLIST conformity
	%conformityExtensions;
>

<!ELEMENT marker (translation*, subprop*)>
<!ATTLIST marker
	id ID #IMPLIED
	label CDATA #REQUIRED
	idType IDREF #IMPLIED
	labelType CDATA #IMPLIED
	%supportObjectExtensions;
	%markerExtensions;
>

<!ELEMENT bannedTypes (bannedType | allBanned)*>
<!ATTLIST bannedTypes
	%bannedTypesExtensions;
>

<!ELEMENT bannedType (type*)>
<!ATTLIST bannedType
	%bannedTypeExtensions;
>
<!ELEMENT allBanned (type*)>
<!ATTLIST allBanned
	%allBannedExtensions;
>
<!ELEMENT type EMPTY>
<!ATTLIST type
	id CDATA #IMPLIED
	label CDATA #IMPLIED
>	

<!ELEMENT modules (module*)>
<!ATTLIST modules
	%modulesExtensions;
>

<!ELEMENT module (conceptTypes, relationTypes?, nestingTypes?)>
<!ATTLIST module
	id ID #IMPLIED
	label CDATA #REQUIRED
	%moduleExtensions;
>


<!-- Graph -->

<!ELEMENT graph (concept*, relation*, edge*, subprop*)>
	<!-- Attributes pointer and pointerMarker are forbidden when nature
	is not "individual". -->
<!ATTLIST graph
	id ID #REQUIRED
	nature CDATA #IMPLIED
	set CDATA #IMPLIED 
	pointer IDREF #IMPLIED 
	pointerMarker CDATA #IMPLIED 
	%environmentObjectExtensions;
	%nodeExtensions;
	%graphExtensions;
>

<!ELEMENT concept (type*, value?, nesting*, subprop*)>
	<!-- If the concept type is conjunctive, idType and labelType attributes
	are not stated but "type" elements are nested in the "concept"
	element.
	For an untyped value, idDatatype attribute has to be used with an empty
	value. -->
<!ATTLIST concept
	id ID #REQUIRED
	idType CDATA #IMPLIED
	labelType CDATA #IMPLIED
	idDatatype CDATA #IMPLIED
	coreferenceClass CDATA #IMPLIED
	referent (generic|individual|variable|value|genericvalue) "generic"
	idMarker CDATA #IMPLIED
	labelMarker CDATA #IMPLIED
	%nodeExtensions;
	%conceptExtensions;
>

<!ELEMENT value (#PCDATA)>
<!ATTLIST value >

<!ELEMENT nesting (subprop*)>
<!ATTLIST nesting
	idType CDATA #IMPLIED
	labelType CDATA #IMPLIED
	nestGraph CDATA #REQUIRED
	%nodeExtensions;
	%nestingExtensions;
>

<!ELEMENT relation (subprop*)>
<!ATTLIST relation
	id ID #REQUIRED
	idType CDATA #IMPLIED
	labelType CDATA #IMPLIED
	%nodeExtensions;
	%relationExtensions;
>

<!ELEMENT edge EMPTY>
<!ATTLIST edge
	rid IDREF #REQUIRED
	cid IDREF #REQUIRED
	label CDATA #REQUIRED
	%edgeExtensions;
>


<!-- Rule. -->

<!ELEMENT rule (hypt, conc, conPts, subprop*)>
<!ATTLIST rule
	id ID #REQUIRED
	%environmentObjectExtensions;
	%ruleExtensions;
>

<!ELEMENT hypt (graph*)>

<!ELEMENT conc (graph*)>

<!ELEMENT conPts (couple*)>
<!ATTLIST conPts
	%conPtsExtensions;
>

<!ELEMENT couple EMPTY>
<!ATTLIST couple
	idC1 IDREF #REQUIRED
	idC2 IDREF #REQUIRED
	%coupleExtensions;
>


<!-- Constraint. -->

<!ELEMENT positiveConstraint (condition, obligation, conPts, subprop*)>
<!ATTLIST positiveConstraint
	id ID #REQUIRED
	%environmentObjectExtensions;
	%positiveConstraintExtensions;
>

<!ELEMENT negativeConstraint (condition?, interdiction, conPts, subprop*)>
<!ATTLIST negativeConstraint
	id ID #REQUIRED
	%environmentObjectExtensions;
	%negativeConstraintExtensions;
>

<!ELEMENT condition (graph*)>

<!ELEMENT obligation (graph*)>

<!ELEMENT interdiction (graph*)>

Sous ensembles de propriétés

Comme avec le format XML, le respect du format CoGXML impose de ne définir qu'une seule valeur pour un attribut donné d'une balise donnée. La bibliothèque CoGITaNT permet toutefois de définir plusieurs valeurs pour un même type de propriété, pour un objet donné (voir cogitant::PropertySet) à condition d'associer à chaque valeur un identifiant unique. L'ensemble de propriétés est alors décomposé en plusieurs sous ensembles, chaque sous ensemble étant identifié par un iSet. Ceci peut être représenté dans le format CoGXML par l'utilisation de balises <subprop>. Chacune de ses balises a un attribut obligatoire (subid) qui représente le iSet, et les autres attributs représentent les propriétés du sous-ensemble de propriétés correspondant. Dans CoGITaNT, cette fonctionnalité est utilisée pour la sauvegarde des propriétés graphiques de éléments de dessin qui ne correspondent pas à des cogitant::CogitantObject.

Extension du format

Une des particularités de la DTD CoGXML est de pouvoir y ajouter facilement de nouveaux attributs sans que la structure de la DTD soit à reprendre. Cette facilité d'ajout a été prévue pour tous les objets qui peuvent être représentés dans le format.
Plus précisément, les entités xxxExtensions déclarées au début de la DTD peuvent être définies pour représenter les caractéristiques de nouveaux attributs des balises. Par exemple, la DTD ci-dessous, basée sur CoGXML, rajoute l'attribut font aux sommets concepts.

<!ENTITY % conceptExtensions
	"font CDATA #IMPLIED"
>

<!ENTITY % cogxmlDTD	PUBLIC
	"-//COGITANT/CoGXML Format Specification 1.1//EN"
	"http://cogitant.sourceforge.net/cogxml.dtd"
>
%cogxmlDTD;

Un fichier utilisant cette DTD pourra alors contenir des déclarations de sommets concepts du type :

<concept id="cn2" idType="pers" coreferenceClass="x1" font="fixed"></concept>

Ces attributs supplémentaires sont lus comme des propriétés des objets définis dans la bibliothèque. Ainsi, la valeur de l'attribut font sera accessible par un appel du type :

concept->properties()->readString("font");

L'analyseur fourni avec la bibliothèque ignore les DTD et ne vérifie donc pas que les attributs présents dans un fichier sont conformes à ceux déclarés dans la DTD. Pour la même raison, des valeurs par défaut présentes dans une extension de la DTD CoGXML seront ignorées (et devront être gérées explicitement par programme).