Système de liens profonds

Afin de déterminer la localisation précise d'un commentaire au sein d'un fragment, nous utilisons un principe de lien profond. Le mot lien fait référence à un système d'adressage d'un fragment à un autre. Le mot profond désigne la possibilité d'aller désigner un élément à l'intérieur d'un fragment.

Un lien profond se structure en deux parties. La première partie définit une adresse vers un fragment résolvable par une chaîne éditoriale. Pour les chaînes éditoriales Scenari, il s'agit soit d'un chemin sur le système de fichiers, soit d'un identifiant de la base de données (en fonction du module de stockage des fragments utilisés). La seconde est la désignation d'un élément XML au sein du fragment. La technologie classique pour la sélection d'un élément XML est XPATH. Cependant, cette technologie nécessite une connaissance du schéma XML puisque la sélection s'opère par le nom des éléments. Nous avons adopté un système plus neutre vis à vis de la structure du fichier XML. Un premier signe « / » désigne l'élément racine. Un nombre désigne ensuite le numéro de l'élément fils sélectionné (« /0 » pour le premier fils, « /3 » pour le quatrième). Un nouveau caractère « / » et un nouveau nombre permettent de sélectionner un élément petit fils et ainsi de suite. Nous utilisons le caractère « @ » pour séparer les deux parties du lien profond.

Exemple

Soit le graphe documentaire suivant. Les étiquettes des sommets correspondent aux identifiants des fragments en base de données.

Graphe documentaire

Posons l'hypothèse que le fragment A2 ait le contenu suivant :

1
<sc:item xmlns:sc="http://www.utc.fr/ics/scenari/v3/core">
2
	<of:section xmlns:of="scpf.org:office" xmlns:sp="http://www.utc.fr/ics/scenari/v3/primitive">
3
		<of:sectionM>
4
			<sp:title>La rééditorialisation documentaire, du document au fragment</sp:title>
5
		</of:sectionM>
6
		<sp:sec sc:refUri="id:A3"/>
7
		<sp:sec sc:refUri="id:A4"/>
8
	</of:section>
9
</sc:item>

La sélection du second élément sp:sec se fait donc comme suit par le lien profond « A2@/0/2 ». Le zéro sélectionne le premier fils de la racine, soit l'élément of:section et le chiffre deux sélectionne le troisième fils de cet élément, soit le second sp:sec.

Association d'un commentaire à un élément

Nous avons choisi d'insérer les commentaires en tant que premiers éléments fils de l'élément auquel ils sont associés. Par exemple, dans l'exemple de code suivant, un commentaire est associé au second élément sp:sec :

1
<sc:item xmlns:sc="http://www.utc.fr/ics/scenari/v3/core">
2
	<of:section xmlns:of="scpf.org:office" xmlns:sp="http://www.utc.fr/ics/scenari/v3/primitive">
3
		<of:sectionM>
4
			<sp:title>La rééditorialisation documentaire, du document au fragment</sp:title>
5
		</of:sectionM>
6
		<sp:sec sc:refUri="id:A3"/>
7
		<sp:sec sc:refUri="id:A4">
8
		<!--<comment xmlns="scenari.eu:comment:1.0" type="thread">
9
			<comment creationTime="1405687267908">
10
			La notion d'ingénierie documentaire n'est pas assez présente dans cette section.
11
			À reprendre.
12
			</comment>
13
			<comment creationTime="1405687276904">
14
			Ok, c'est noté.
15
			</comment>
16
		</comment>-->
17
		</sp:sec>
18
	</of:section>
19
</sc:item>

Le lien profond permettant de sélectionner le fil de commentaire est « A2@/0/2/0 » (car l'élément de commentaire XML est le premier fils de « A2@/0/2 »). Afin de désigner un commentaire au sein d'une discussion, nous proposons d'utiliser une troisième partie au sein des liens profonds. Cette troisième partie spécifie uniquement le numéro du commentaire dans la liste. Par exemple, le lien profond permettant de sélectionner le commentaire contenu dans le fil de commentaires est « A2@0/2/0@0 ». Le premier commentaire de réponse à la discussion sera désigné par « A2@0/2/0@1 ».

Insertion des liens profonds dans les documents HTML

Lorsqu'un élément issu d'un fragment est transformé en un élément HTML, l'algorithme de transformation ajoute automatiquement un attribut data-origin à l'élément HTML. Cet attribut suit les recommandations du standards HTML5 pour l'insertion de données dans des pages HTML (insertion dans un attribut dont l'intitulé débute par « data- ») (W3C, 2014[1], section 3.2.5.9). Ainsi, au fur et à mesure de la génération du fichier HTML, plusieurs éléments sont enrichis avec des liens profonds vers des éléments XML contenus dans des fragments de la chaîne éditoriale.

Détection des liens profonds et édition des commentaires

La partie cliente intégrée à une publication web détecte l'ensemble des éléments contenant un lien profond. Ces éléments sont considérés comme pouvant contenir des commentaires. L'ensemble des ces liens sont transmis au service dédié de la chaîne éditoriale qui, pour chacun des liens, liste l'ensemble des commentaires associés. La liste complète des commentaires à afficher est ainsi envoyée par le serveur et les commentaires sont dynamiquement attribués aux éléments HTML la page publiée.

Le système de lien profond permet ensuite de désigner de façon rigoureuse les éléments classiques commentables, les fils de commentaires et les commentaires au sein de ces fils afin de proposer des fonctions d'édition, d'ajout ou de suppression.