Site Content

WelcomeMy Rebol NotesDOM Implementation with Rebol

Projet d'implémentation du DOM.

Introduction

L'objectif de ce projet est de fournir à l'ensemble de la communauté REBOL une implémentation solide des différents niveaux du DOM (Level 1,2,3).

L'idée de ce projet m'est venue en apprenant le langage XML et son dérivé XSLT. Je me suis rendu compte que le couple XML/XSLT pouvait grandement faciliter le dévelopement et le maintient conjoints d'un site web et d'un reb-site: en créant deux scripts XSLT, l'un pour transformer du XML en HTML, l'autre du XML en VID, il devient très aisé de maintenir et d'améliorer un site.

Ce document n'est pas une traduction du 'Document Object Model (DOM) Level 1 Specification' disponible sur le site de la W3C. Il s'agit plutôt d'un ensemble de commentaires et de notes concernant l'implémentation de ces spécifications en Rebol.

Il est donc nécessaire de lire les spécifications à l'adresse suivante:

Avant de se lancer dans la programmation proprement dite des interfaces détaillées dans REC-DOM-LEVEL-1-19981001, je penses que la rédaction d'un document comme celui-ci est importante pour établir une base commune de travail et assurer ainsi la cohérence entre les différentes contributions.

La suite de ce documents contient mes premières réflexions concernant l'implementation du DOM niveau 1 en Rebol. N'hésiter pas à m'envoyer vos commentaires et vos réflexions afin de terminer ce document le plus rapidement.

Afin de faciliter la lecture des spécifications du DOM de niveau 1, j'en ai dressé un diagramme de classes. J'ai également commencer l'impémentation de la classe Node.

Back to TOP

Interfaces DOM de niveau 1

Cette section contient quelques réflexions concernants la section '1.1. Overview of the DOM Core Interface'du document 'REC-DOM-Level-1-19981001'

Convention de nommage

Je suggère de faire précéder les noms des attributs de classes du caractère souligné (_). Cela permettra d'éviter tout conflit entre ces attributs et les variables locales des méthodes de classes.

Back to Interfaces DOM de niveau 1

Le type DOMString

Les applications doivent coder le type DOMString en utilisant UTF-16.

Je pense que le type string! rebol utilise déjà UTF-16. Nous pourrions donc utiliser string! en lieu et place de DOMString. Cependant, afin de respecter les spécifications de la W3C, je propose d'utliser DOMString en le définissant de la manière suivante:

DOMString!: :string!
DOMString?: :string?

Ainsi, s'il s'avère que string! n'utilise pas UTF-16, il suffira de redéfinir le type DOMString! afin d'adapter l'ensemble du framework.

Qqn peut-il confirmer que le type string! utilise bien UTF-16?

Back to Interfaces DOM de niveau 1

Back to TOP

Interfaces fondamentales

Cette section contient quelques réflexions concernants la section '1.2. Fundamental Interfaces' du document 'REC-DOM-Level-1-19981001'

Interface NodeList

NodeList est définie comme une interface fournissant un acces à une collection ordonnée de noeuds La seule méthode définie est 'item' qui renvoit une élément spécifique de la liste sur base d'un index.

Dans la mesure où les séries de type block fournisse toutes les fonctions pour manipuler de telles collections, je pense qu'il n'est pas nécessaire d'implémenter cette interface. Il est aussi simple d'écrire 'pick b 3' où 'b/3' que 'b/item 3'

Back to Interfaces fondamentales

Interface NamedNodeMap

Le document REC-DOM-LEVEL-1-19981001 spécifie que "les objects implementant l'inerface NamedNodeMap sont utilisés pour représenter des collections de neouds accessibles par leur nom."

Rebol permet grace au séries de type block d'atteindre le même résultat que NamedNodeMap:

attributes: [
attr-1-name attr-1
attr-2-name attr-2
attr-3-name attr-3
...
attr-i-name attr-i
...
attr-n-name attr-n
]
an-attribute: get select attributes attr-i-name

La variable 'an-attribute' réfère le contenu de 'attr-i'

Néanmoins, je pense que l'implémentation de cette interface est utile. En effet, contrairement à NodeList la definition de NamedNodeMap contient des méthodes plus complexes. Les implémenter facilitera le travail de l'utilisateur du framework. Il est plus aisé et compréhensible d'écrire:

attributes/setNamedItem arg

que d'écrire

change next find attributes arg/nodeName arg

Back to Interfaces fondamentales

Back to TOP