Grammaire de XML-QL

publicité
Aymeric Lesert
28 Mars 2003
XML – QL : A Query Language for XML
http://www.w3c.org/TR/NOTE-xml-ql/ (19 Août 1998)
I. Introduction
Avec l’explosion d’Internet, le W3C a été encouragé à chercher un format d’échanges d’information
entre des applications distantes. Avant XML, il existait quelques modèles comme SGML ou BOD mais ils
étaient trop spécialisés pour être exploité par les développeurs d’Internet. Le XML est un héritier de ces anciens
formats. Il est, officiellement, naît le 10 février 1998. Ce qui a fait la force de ce format a été son
interopérabilité, sa réutilisabilité et la mise à disposition d’outils facilitant son exploitation.
II. Un document XML
Un document XML est un fichier ASCII (mode caractère) permettant de décrire des informations ou
capable de véhiculer des informations d’une application à une autre. Il se construit comme une page HTML
sauf que les balises sont libres (ex : <INFO>).
Un document XML a une définition récursive :

Un champ
: <NOM> Valeur </NOM>

Un nœud
: <INDIVIDU> Champ(s) ou Nœud(s) </INDIVIDU>
<NOM> , </NOM>, <INDIVIDU> , </INDIVIDU> sont aussi appelés des balises.
Il est possible d’attribuer aux balises des attributs <INDIVIDU Age=20 Taille=grand>.
En général, un document XML est accompagné de deux autres fichiers, un DTD pour vérifier la bonne
structure du fichier XML et d’un XSL pour le visualiser ou le transformer.
Cette structure simple offre un grand pouvoir d’expressions, notamment, pour décrire des objets avec
leurs attributs et supporte facilement l’évolution dans le contenu des informations (ajout ou suppression de
champs). Sa structure hiérarchique est également très adaptée à une modélisation « objet ».
III. Le langage d’interrogation XML-QL
A priori, nous pouvons penser que XML-QL est redondant avec un fichier XSL. XSL transforme un
document XML en un autre document (de forme quelconque : HTML, PS, XML, …) en extrayant tout ou partie
des données présentes. XML-QL transforme un document XML en un autre document XML, seulement. Il
dispose aussi d’opérations sur les données (extraction selon certains critères, jointure ou tri).
Dans le cas de l’utilisation de XML-QL, nous pouvons définir :
 Un fichier DTD comme un schéma de base de données (Description des classes et des attributs),
 Un fichier XSL comme la présentation du résultat,
 Un nœud comme une instance d’une classe,
 Un champ comme un attribut d’un objet.
A. Quelques éléments de syntaxe
$<nom> fait référence à la valeur que l’on a fait correspondre avec un nœud ou un champ d’un
document XML.
Ex : <TITRE>$t</> : « t » fait alors référence à la valeur du champ TITRE.
<$a> … </> : « a » fait référence au nom du nœud ou du champ répondant aux critéres.
<..> …(valeur) … </> CONTENT_AS $a : « a » fait référence au contenu du nœud
<..> … </> ELEMENT_AS $a : « a » fait référence au nœud
B. Les opérations
1. Conversion d’un ou plusieurs XML
XML-QL offre la possibilité d’interroger sur des données présentes dans plusieurs documents XML et
le résultat des interrogations est toujours un autre document XML.
2. Extraction de champs ou de nœuds (WHERE … CONSTRUCT)
Grâce à la technique du « pattern-matching », la clause WHERE permet d’identifier la partie du
document XML correspondant à une interrogation. La clause CONSTRUCT décrit le contenu du document
XML résultant de l’interrogation.
DEA IA & OC (Université Paris VIII)
Bases de données
Aymeric Lesert
28 Mars 2003
XML – QL : A Query Language for XML
http://www.w3c.org/TR/NOTE-xml-ql/ (19 Août 1998)
3. Le regroupement avec des interrogations imbriquées
Comme le résultat d’une requête XML-QL est un document XML, il est possible de réaliser des
requêtes imbriquées. Cela consiste a restreindre un premier domaine et à le soumettre à une autre interrogation
pour, ensuite, réaliser des regroupements d’informations autour d’une donnée commune.
4. Jointure et Identité des éléments, IDs et IDREFs
Dans un document XML, la jointure est réalisée par la correspondance pour une même variable d’une
même valeur dans deux sélections. Pour faciliter la jointure, il existe deux types d’attribut (ID et IDREF). Le
type d’attribut ID permet d’attribuer un identifiant unique à un objet (un nœud ou un attribut). Le type d’attribut
IDREF permet de lier deux objets entre eux en faisant référence dans cet attribut à l’identifiant d’un objet
existant et définit par le type d’attribut ID.
5. Création d’identité d’éléments (ID=Fonction($a1, … $a2))
Dans le cas du résultat d’une requête XML-QL, il est parfois nécessaire d’identifier les objets créés. Il
existe, pour cela, un procédé qui consiste à attribuer un identifiant unique à chaque objet identifié par la suite
d’arguments $a1, … $a2 regroupé sous l’identifiant « Fonction ».
Ex : PersonID($Nom,$Prenom) attribue un identifiant unique à chaque paire distincte (Nom,Prenom)
regroupé sous le concept « PersonID ».
INSEEID($Numero_securite) attribut un identifiant unique à chaque N° INSEE différent
regroupé sous le concept « INSEEID ».
6. Jointure externe et fonction de Skolémisation ( … { <Requête> } … )
Dans le langage SQL, les jointures externes permettent d’exprimer la possibilité de faire des jointures
entre deux tables pouvant éventuellement ne pas satisfaire la condition de jointure. Cette fonctionnalité peut
s’avérer également très utile dans une requête XML-QL, surtout si les données proviennent de sources
différentes. Pour cela, il faut définir une requête XML-QL entre accolade « {» et « } ».
7. Tri des données (ORDER-BY .. [ASCENDING | DESCENDING])
Le tri s’applique uniquement sur des valeurs de champs. Le tri est soit croissant (par défaut), soit
décroissant.
8. « Regular path expressions » ou Expressions régulières d’un chemin
La nouveauté de ce langage, par rapport à SQL, est sa capacité à interroger sur des champs ou des
nœuds dont le nom n’est pas précisé ou dont l’accès répond lui même à un critère de sélection. Il est alors
possible de décrire sous forme d’expressions régulières (Cf. GREP) le chemin décrivant le nœud ou le champ à
accéder.
Ex : <part+.(subpart|component.piece)> 
<part><subpart></></> , <part><part><subpart></></></> ou <part><component><piece></></></>
ou tout sous-arbre de nœud <part> contenant un attribut <subpart> ou un nœud <component> avec un
attribut <piece>
9. Définition de fonctions (FUNCTION … END)
Un document XML peut lui-même contenir une ou plusieurs requêtes XML-QL (définition par
extension). Un fichier DTD peut contenir aussi des fonctions (ou des macros) permettant de factoriser certaines
opérations d’extraction d’informations.
C. Avantages
Un tel langage offre la possibilité d’effectuer des interrogations sur des fichiers XML d’origines
différentes (données ou structures). Le résultat d’une requête reste un document XML, éventuellement,
réutilisable dans une autre requête.
Nous stockons dans une base de données au format XML que les informations utiles (les champs vides
peuvent être omis) et les relations de type pére-fils sont matérialisées par une sous-structure d’un objet (cela
permet de gagner une jointure, une colonne et une clé étrangère dans une base de données relationnelles). Ces
DEA IA & OC (Université Paris VIII)
Bases de données
Aymeric Lesert
28 Mars 2003
XML – QL : A Query Language for XML
http://www.w3c.org/TR/NOTE-xml-ql/ (19 Août 1998)
deux aspects permettent, dans certains cas, de réduire de manière substantielle la taille de la base de données
par rapport à une base de données relationnelles comme Oracle ou SQLServer.
D. Inconvénients
Ce langage peut s’avérer très lent ou très gourmand en mémoire si l’utilisation de jointure devient
important. La mise à jour (création, modification ou suppression) dans une base de données XML n’est pas
gratuite ; il faut réécrire tout le fichier et il n’est pas possible de poser des index (accès direct à l’information).
L’opération de « pattern-matching » est, également, très coûteuse en temps machine ; elle ne vaut pas un test de
comparaison.
IV. Conclusion
L’idée n’est pas mauvaise mais les besoins ont évolués. Ce langage a été abandonné au profit de
XQuery. Il est promu par le W3C et est plus proche des préoccupations des industriels. Ce nouveau langage
adopte une philosophie qui tranche avec le langage SQL. C’est un langage d’interrogation proche d’un langage
de programmation (php ou perl).
L’avantage indéniable de données structurées font que les bases de données XML peuvent être
intéressantes dans un système d’informations dont les sources sont hétéroclites mais limitées (pas trop grandes)
si il existe une contrainte de temps et d’espaces.
V. Annexe : Abréviations
W3C
World Wide Web Consortium : organisme chargé de promouvoir les technologies
d’interopérabilité pouvant être utilisé par des applications Web (Spécification, Manuel
d’utilisation, Logiciels ou outils).
XML
eXtensible Markup Language : modèle de représentation de données (fichier .xml)
XSL
eXtensible Stylesheet Language : décrit le style de représentation (dans un navigateur)
du contenu d’un document XML (fichier .xsl)
XSLT
eXtensible Stylesheet Language Transformation : procédé permettant de réécrire un
document XML en un autre document XML (en général, pour rendre un document
XML compatible avec un système d’informations déjà existant)
DTD
Document Type Declaration : Définition d’une « bonne » structure d’un document
XML (fichier .dtd)
SGML
Standard Generalized Markup Language : Ancêtre de XML
BOD
Business Object Document : définit par Open Applications Group
SQL
Structured Query Language : Langage utilisé pour l’interrogation commune des bases
de données relationnelles (Comme Oracle, Access ou SQLServer).
VI. Références
W3C : http://www.w3.org/ : Site official de la W3C
Version de travail du cahier des charges de XML-Query : http://xmlfr.org/actualites/tech/000201-0001
Tutorial de XML-QL : http://www.javacommerce.com/tutorial/xml/xmlql.html
Bibliothèque Perl pour une utilisation de XML-QL :
http://theoryx5.uwinnipeg.ca/mod_perl/cpan-search?dist=XML-QL
Tutorial de XSL : http://www.zvon.org/xxl/XSLTutorial/Books/Book1/index.html
Business Object Document : http://xml.coverpages.org/ni2002-04-06-b.html
DEA IA & OC (Université Paris VIII)
Bases de données
Aymeric Lesert
VII.
28 Mars 2003
XML – QL : A Query Language for XML
http://www.w3c.org/TR/NOTE-xml-ql/ (19 Août 1998)
Annexe : Grammaire de XML-QL
XML-QL ::= (Function | Query) <EOF>
Function ::= 'FUNCTION' <FUN-ID> '(' (<VAR>(':' <DTD>)?)* ')' (':' <DTD>)?
Query
'END'
Query ::=
Element ::=
StartTag ::=
SkolemID ::=
Attribute ::=
EndTag ::=
Literal ::=
QueryBlock ::=
Where ::=
Construct ::=
Condition ::=
Pattern ::=
StartTagPattern ::=
RegularExpression ::=
Element | Literal | <VAR> | QueryBlock
StartTag Query EndTag
'<'(<ID>|<VAR>) SkolemID? Attribute* '>'
<ID> '(' <VAR> (',' <VAR>)* ')'
<ID> '=' ('"' <STRING> '"' | <VAR> )
'<' / <ID>? '>'
<STRING>
Where Construct ('{' QueryBlock '}')*
'WHERE' Condition (',' Condition)*
OrderedBy? 'CONSTRUCT' Query
Pattern BindingAs* 'IN' DataSource | Predicate
StartTagPattern Pattern* EndTag
'<' RegularExpression Attribute* '>'
RegularExpression '*' |
RegularExpression '+' |
RegularExpression '.' RegularExpression |
RegularExpression '|' RegularExpression |
<VAR> | <ID>
BindingAs ::=
Predicate ::=
Expression ::=
OpRel ::=
OrderedBy ::=
DataSource ::=
'ELEMENT_AS' <VAR> | 'CONTENT_AS' <VAR>
Expression OpRel Expression
<VAR> | <CONSTANT>
'<' | '<=' | '>' | '>=' | '=' | '!='
'ORDERED-BY' <VAR>+
<VAR> | <URI> | <FUN-ID>(DataSource (',' DataSource)*)
DEA IA & OC (Université Paris VIII)
Bases de données
Téléchargement