Aide-mémoire XPath, XQuery, XSLT, Datalog et Requêtes

Envoyé par Anonyme et classé dans Anglais

Écrit le en français avec une taille de 5,87 KB

XPATH
/a/b=fils;//a=partout;@x=attr;.=courant;text()=texte;A[B]=filtre;not(),and,or
[A]=existe;[not(A)]=aucun
A=B: existe paire egale;A!=B: existe paire differente;ATT A!=B != not(A=B)
>=2 valeurs diff: f/@c!=f/@c
>=3 dont rouge: f/@c="rouge" and f[@c!="rouge"]/@c!=f[@c!="rouge"]/@c
Doublon:f[@x=following-sibling::f/@x]
Garder 1:f[not(@x=following-sibling::f/@x)]
Unique global:x[not(@a=following::x/@a)]
Absent avant:not(f/@x=preceding-sibling::p/f/@x)
Absent apres:not(f/@x=following-sibling::p/f/@x)
sum(f/@n)
MAX sans max:A[not(v(A)<//A/v(A))]
MIN sans min:A[not(v(A)>//A/v(A))]
Tous sauf min:A[v(A)>//A/v(A)]
Tous sauf max:A[v(A)<//A/v(A)]
Max somme://bouquet[not(sum(fleur/@nombre)<//bouquet/sum(fleur/@nombre))]/@bnom
Pas multi-couleurs://bouquet[not(fleur[@fnom=following-sibling::fleur/@fnom])]/@bnom

XQUERY
let $x:=... return ...
for $x in ... Let $y:=... Where ... Order by ... Return ...
distinct-values(...);sum(...)
Construction:<out>{for $x in ... Return <i a="{$x/@a}">{$x}</i>}</out>
Element dynamique:element {$x}{...}
Pattern:<root>{for $a in distinct-values(...) return <x>{for $b in ... Return ...}</x>}</root>
MAX sans max:for $x in ... Let $v:=... Where not($v<(for $y in ... Return ...)) return $x

XSLT
<xsl:template match="/"><out><xsl:apply-templates select="..."/></out></xsl:template>
<xsl:template match="x">...</xsl:template>
<xsl:value-of select="..."/>
<x a="{@a}"/>
<xsl:attribute name="a"><xsl:value-of select="..."/></xsl:attribute>
<xsl:element name="{@x}">...</xsl:element>
current()=noeud du template courant
Unique local:x[not(@a=following-sibling::x/@a)]
Unique global:x[not(@a=following::x/@a)]
Pattern:<xsl:template match="/"><root><xsl:apply-templates select="//x[UNIQUE]"/></root></xsl:template>
<xsl:template match="x"><out a="{@a}"><xsl:value-of select="sum(...Current()/@a...)"/></out></xsl:template>
Souvent interdits:xsl:for-each,xsl:if,distinct-values(),xsl:with-param

CQ/UCQ
q:Ans(x)<-R(...),S(...)
Homo h:q1->q2:tete respectee;constantes fixes;chaque atome h(q1) existe dans q2
THEOREME:q1 subseteq q2 SSI homo q2->q1 !!!SENS INVERSE!!!
Equiv:q1==q2 SSI h:q1->q2 ET h:q2->q1
UCQ=union de CQ
Si qi subseteq qj => qi redondante => supprimer qi
Methode:1 minimiser chaque CQ 2 tester inclusions 3 supprimer redondantes
Minimiser q:chercher sous-requete q' avec q->q' ET q'->q
Variables de tete gardent leurs positions
Pas homo:forcer images jusqu'a atome requis absent
Pas inclusion:trouver I avec q1(I) non inclus q2(I)


ALPHA-ACYCLICITE/GYO
Hyperarete=schema
Oreille O de T:tous attrs de O apparaissant ailleurs sont contenus dans T
O subseteq T => O oreille
GYO:tant qu'oreille supprimer;si tout disparait=>alpha-acyclique;si bloque=>pas alpha-acyclique
Arbre jointure:1 noeud/hyperarete;pour chaque attr A,tous noeuds contenant A forment sous-arbre connexe
alpha-acyclique <=> arbre de jointure <=> GYO supprime tout

SEMIJOIN
R semijoin S=garder tuples de R ayant au moins 1 tuple compatible dans S
R:=R semijoin S => R change,S ne change pas
Dangling=tuple ne participant a aucun tuple de jointure totale
Full reducer=supprime tous dangling pour toute instance
Prouver pas full reducer:petite instance ou dangling survit
Join-tree reducer:feuilles->racine puis racine->feuilles

DATALOG
p(X,Y):-r(X,Z),s(Z,Y).
EDB=entree;IDB=calcule;Vars=MAJ;preds/constantes=minuscule
Vars tete doivent apparaitre positivement dans body
Chemin:reach(X,Y):-r(X,Y,C). Reach(X,Z):-reach(X,Y),r(Y,Z,C).
Cycle:cycle(X):-reach(X,X).
Meme colorama:go(X,Y,U,V):-r(X,Y,C),r(U,V,C). Go(X,Z,U,W):-go(X,Y,U,V),r(Y,Z,C),r(V,W,C).
Memoire etat:si propriete depend derniere couleur,la garder en argument
alt(X,Y,C):-r(X,Y,C). Alt(X,Z,D):-alt(X,Y,C),r(Y,Z,D),C!=D.
"Tout chemin satisfait P" = existe chemin ET pas de chemin violant P
Pattern:reach(...);bad(...);answer(X,Y):-reach(X,Y),not bad(X,Y).
Aucun green:
greenPath(X,Y):-r(X,Y,green).
greenPath(X,Z):-greenPath(X,Y),r(Y,Z,C).
greenPath(X,Z):-r(X,Y,C),greenPath(Y,Z).
answer(X):-reach(X,X),not greenPath(X,X).
ATT:"aucun chemin utilise green" != "existe chemin sans green"
Transitivite:bad(C,D):-edge(X,Y,C,D),edge(Y,Z,C,D),not edge(X,Z,C,D). Trans(C,D):-colors(C,D),not bad(C,D).

NEGATION STRATIFIEE
p->q=dependance + ; p-/>q=dependance negative
Stratifie SSI aucun cycle du PDG contient dependance negative
Methode:calculer positif/bad puis not bad dans couche superieure
Interdit:arithmetique,<,<=,COUNT,SUM,listes/arbres,negation non stratifiee

NON-DANGLING EN DATALOG
vF(F):-v(F,G).
uD(D):-u(D,F),vF(F).
tCD(C,D):-t(C,D,E),uD(D).
sBCD(B,C,D):-s(B,C,D),tCD(C,D).
rBC(B,C):-r(A,B,C).
answer(B,C,D):-sBCD(B,C,D),rBC(B,C).
=> petites regles;peu variables;PDG acyclique

CHASE/FD/JD
FD:X->Y
Tester F|=JD:1 tableau canonique JD 2 appliquer FD jusqu'au point fixe 3 si ligne toute distinguished=>vrai sinon faux
Appliquer X->Y:2 lignes memes valeurs sur X=>identifier valeurs sur Y
JD *[R1,...,Rn]:r=join(proj_R1(r),...,proj_Rn(r))
Prouver JD fausse:relation satisfait toutes FD mais jointure projections ajoute tuple

Entrées associées :