Skip to content

[SPARQL 1.1] Compléter les fonctions built-in dans SparqlAstToExpression #524

Description

@abdessamad-abdoun

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions