Xml Path
Format Xml Path utilisé par Up ! eXtended Markup Language
Xml Path permet d'extraire une partie d'un flux Xml a partir d'un chemin. L'espace de noms de Xml Schema est xmlns:fn=http://www.w3.org/2005/xpath-functions"
.
Du point de vue Xml Path, le flux Xml est organisé en arbre de noeuds. Les sortes de noeuds sont :
- Document correspondant à tout le flux Xml.
- Espace de noms du flux Xml.
- Elément correspondant à une instance d'une entité du schéma du flux Xml.
- Attribut des entités du flux Xml.
- Texte libre entre les balises du flux Xml.
- Instruction à destination entre les balises
<?
et ?>
.
- Commentaire entre les balises
<--
et -->
.
Les noeuds de l'arbre sont numérotés en infixé. Ainsi, chaque noeud comporte :
- Un numéro d'ordre dans le flux Xml.
- Une sorte.
- Un noeud père sauf le noeud racine.
- Eventuellement des noeuds fils.
- Eventuellement un noeud pour son espace de noms Xml Namespace.
- Un type de données Xml Schema.
- Une valeur exprimée au format soit :
- Binaire conforme à son type - Par exemple 10.
- Texte pour être lisible directement - Par exemple 10".
Xml Path peut être utilisé pour :
- Définir les clés primaires, uniques et étrangères de Xml Linking.
- Valoriser un attribut tel href.
- Définir un critère d'extraction de Xsl Transormations.
- Définir un critère de sélection de Xml Pointer.
- Définir les critères d'une requête Xml Query.
Une expression Xml Path est construite à partir d'opérateurs, de booléens, de nombres, de chaîne de caractères, de nom d'entités et de fonctions pré-définies. Elle du type :
- Booléen.
- Nombre entier ou réel.
- Chaîne de caractères.
- Noeud.
- Séquence de noeuds i.e. liste de noeuds.
- Attribut.
- Séquence d'attributs i.e. liste de noeuds.
L'expression est évaluée dans un contexte qui peut être :
- Défini par l'appelant pour Xsl Transormations ou Xsl Pointer.
- Le noeud courant pour un attribut valorisé.
- Le noeud principal du flux Xml.
Le chemin est défini par des sous-chemins séparés par le caractère division. Chaque sous-chemin est défini par une expression comportant :
- Un axe.
Par exemple child
pour démarrer à partir des noeuds fils du noeud courant i.e. le contexte.
- Un filtre sur l'ensemble des noeuds ou d'attributs sous forme de test.
Par exemple Employe
pour sélectionner les noeuds correspondant à l'entité Employe parmi les noeuds fils.
- Eventuellement une liste de prédicats.
Par exemple position()=1
pour sélectionner le premier noeud des entités Employe.
Voici un exemple d'expression complète :
<-- Selectionne le premier noeud fils de sorte Employe. -->
child::Employe[position()=1]
Dans les faits, Xml Path ne sait gérer que des séquences i.e. listes, un peut comme en Lisp. Ainsi, une valeur atomique tel un booléen, un nombre entier ou une chaîne de caractères est en fait une séquence ne comportant qu'un seul élément appelé singleton. La séquence vide se note ()
.
Syntaxe de Xml Path
Cette syntaxe ne comporte que les instructions des expressions et non celles de structure tel every, for, if, return, some. Celles-ci sont présentées dans Xml Query étant donné qu'elles sont reformulées par cette extension d'Xml Path.
Chemin :
ListeDExpressions :
Expression :
OperateurBinaire :
and
| div
| eq
| except
| ge
| gt
| idiv
| intersect
| is
| ne
| le
| lt
| or
| mod
| to
| union
| =
| !=
| <=
| >=
| <
| >
| +
| -
| *
| |
| /
| //
| <<
| <<
;
OperateurUnaire :
TypeSeul :
SuiteTypeSeulOption :
TypeSequence :
TestSorteNoeud :
TestDocument :
ParametreTestDocument :
TestElement :
ParametresTestElement :
SuiteParametreTestElementOption :
SuiteParametreTestElement2Option :
TestElementGlobal :
schema-element (
NomDeLElement )
;
TestAttribut :
ParametresTestAttribut :
SuiteParametreTestAttribut :
TestAttributGlobal :
schema-attribute (
NomDeLAttribut )
;
TestInstructionApplication :
ParametreTestInstructionApplicationOption :
| ChaineDeCaracteres
| Identifiant
;
NbOccurrencesOption :
ExpressionChemin :
CheminLocalisationOption :
CheminLocalisationRelatif :
Etape :
SpecificationDAxe :
NomDAxe :
ancestor
| ancestor-or-self
| attribute
| child
| descendant
| descendant-or-self
| following
| following-sibling
| namespace
| parent
| preceding
| preceding-sibling
| self
;
TestDuNoeud :
NomDeLElement
| *
| PrefixeEspaceDeNoms :
NomDeLElement
| PrefixeEspaceDeNoms : *
| * :
NomDeLElement
| TestSorteNoeud
;
ListeDePredicatsOption :
ListeDePredicats :
Predicat :
ExpressionPrimaire :
ListeDExpressionsOption :
Opérateurs de Xml Path
=
!=
<
<=
>
>=
|
/
//
.
..
[]
()
,
+
-
<<
>>
::
*
@
?
Mots-clé de Xml Path
ancestor
ancestor-or-self
and
as
attribute
cast
castable
child
comment
descendant
descendant-or-self
div
document-node
element
empty-sequence
eq
except
following
following-sibling
ge
gt
idiv
instance
intersect
is
item
le
lt
mod
namespace
ne
node
of
or
parent
preceding
preceding-sibling
processing-instruction
schema-attribute
schema-element
self
text
to
treat
union
APIs de Xml Path
abs
adjust-date-to-timezone
adjust-dateTime-to-timezone
adjust-time-to-timezone
anyUri
avg
base64Binary
boolean
byte
ceiling
codepoint-equal
codepoints-to-string
collection
compare
concat
concatenate
contains
count
current-date
current-dateTime
current-time
data
date
day-from-date
day-from-dateTime
days-from-duration
dayTimeDuration
deep-equal
default-collation
distinct-values
doc
doc-available
double
duration
empty
encode-for-uri
ends-with
ENTITY
error
escape-html-uri
exactly-one
exists
false
float
floor
gDay
gMonth
gMonthDay
gYear
gYearMonth
hexBinary
hours-from-dateTime
hours-from-duration
hours-from-time
ID
IDREF
implicit-timezone
in-scope-prefixes
index-of
insert-before
int
integer
iri-to-uri
lang
language
last
local-name
local-name-from-QName
long
lower-case
matches
max
min
minutes-from-dateTime
minutes-from-duration
minutes-from-time
month-from-date
month-from-dateTime
months-from-duration
Name
namespace-uri
namespace-uri-for-prefix
namespace-uri-from-QName
NCName
negativeInteger
NMTOKEN
nonNegativeInteger
normalizedString
normalize-space
normalize-unicode
not
number
one-or-more
position
positiveInteger
prefix-from-QName
QName
remove
replace
resolve-QName
resolve-uri
reverse
root
round
round-half-to-even
seconds-from-dateTime
seconds-from-duration
seconds-from-time
static-base-uri
starts-with
string
string-join
string-length
string-to-codepoints
subsequence
substring
substring-after
substring-before
sum
to
token
tokenize
timezone-from-date
timezone-from-dateTime
timezone-from-time
trace
translate
true
unordered
unsignedByte
unsignedInt
unsignedLong
unsignedShort
upper-case
year-from-date
year-from-dateTime
yearMonthDuration
years-from-duration
zero-or-one