Contexte
SparqlAstToExpression gère les opérateurs logiques, les fonctions de chaînes,
les hashes, EXISTS, IF, COALESCE.
Les fonctions numériques (ABS, CEIL, FLOOR, ROUND, RAND),
date/heure (NOW, YEAR, MONTH, DAY, HOURS, MINUTES, SECONDS, TIMEZONE, TZ),
IRI/UUID (UUID, STRUUID) et isNumeric/STRLEN semblent absentes du switch.
Exemples SPARQL minimaux
-- Numériques
SELECT (ABS(?x) AS ?abs) (CEIL(?x) AS ?c) (FLOOR(?x) AS ?f)
WHERE { ?s <:val> ?x }
-- Date/heure
SELECT (NOW() AS ?now) (YEAR(?d) AS ?y) (MONTH(?d) AS ?m)
WHERE { ?e <:date> ?d }
-- UUID
SELECT (UUID() AS ?id) WHERE { ?s ?p ?o } LIMIT 1
-- STRLEN / isNumeric
SELECT (STRLEN(?name) AS ?len) WHERE { ?s <:name> ?name }
Comportement attendu
- ABS/CEIL/FLOOR/ROUND : opérations numériques standard XSD.
- RAND() :
xsd:double dans [0, 1), non déterministe.
- NOW() :
xsd:dateTime courant, constant pour la durée de la requête.
- YEAR/MONTH/DAY/HOURS/MINUTES/SECONDS/TIMEZONE/TZ : extraction depuis
xsd:dateTime.
- UUID() : IRI
urn:uuid:... aléatoire.
- STRUUID() : chaîne UUID aléatoire.
- STRLEN : longueur de la chaîne.
- isNumeric : vrai pour les littéraux numériques typés.
- Erreur de type → binding non lié (erreur silencieuse).
Fichiers concernés
| Fichier |
Rôle |
next/query/impl/sparql/bridge/SparqlAstToExpression.java |
Ajouter les cas manquants |
next/query/impl/sparql/ast/constraint/ |
Nœuds AST des fonctions manquantes |
sparql/triple/function/ |
Implémentations côté kgram |
Tests à ajouter
Tests unitaires (SparqlAstToExpressionTest) :
- Vérifier que chaque nœud AST manquant produit l'expression KGRAM correspondante
Tests E2E :
- ABS, CEIL, FLOOR, ROUND sur entiers et décimaux
- RAND → valeur dans
[0, 1)
- NOW → dateTime non null
- YEAR/MONTH/DAY sur date connue
- UUID → IRI urn:uuid:... valide
- STRLEN sur chaîne de longueur connue
- isNumeric sur différents types
Hors périmètre
- Fonctions de hachage (déjà câblées : MD5, SHA1, SHA256, SHA384, SHA512)
- Fonctions de chaînes de base (déjà câblées)
- Agrégats (issue dédiée)
Contexte
SparqlAstToExpressiongère les opérateurs logiques, les fonctions de chaînes,les hashes, EXISTS, IF, COALESCE.
Les fonctions numériques (ABS, CEIL, FLOOR, ROUND, RAND),
date/heure (NOW, YEAR, MONTH, DAY, HOURS, MINUTES, SECONDS, TIMEZONE, TZ),
IRI/UUID (UUID, STRUUID) et isNumeric/STRLEN semblent absentes du switch.
Exemples SPARQL minimaux
Comportement attendu
xsd:doubledans[0, 1), non déterministe.xsd:dateTimecourant, constant pour la durée de la requête.xsd:dateTime.urn:uuid:...aléatoire.Fichiers concernés
next/query/impl/sparql/bridge/SparqlAstToExpression.javanext/query/impl/sparql/ast/constraint/sparql/triple/function/Tests à ajouter
Tests unitaires (
SparqlAstToExpressionTest) :Tests E2E :
[0, 1)Hors périmètre