diff --git a/project/dalia/curation/suggest/proficiency_levels.py b/project/dalia/curation/suggest/proficiency_levels.py index ac1a7822691f9f339147c4d19d8284a96883a3fc..064632a79b5adf566158360e9329abeb18a357ed 100644 --- a/project/dalia/curation/suggest/proficiency_levels.py +++ b/project/dalia/curation/suggest/proficiency_levels.py @@ -4,7 +4,7 @@ from rdflib import RDF, RDFS, Variable from project.dalia.api_models.api_models import LabelValueItem from project.dalia.query.utils import query_ontologies_dataset -from project.dalia.query_builder.query_builder import Aggregates, FunctionExpressions, PropertyPaths, QueryBuilder +from project.dalia.query_builder.query_builder import QueryBuilder from project.dalia.rdf.namespace import MoDalia @@ -23,22 +23,16 @@ _VARIABLES = { def prepare_query_to_get_proficiency_levels() -> str: var_level = _VARIABLES["level"] + var_level_order = Variable("levelOrder") return QueryBuilder().SELECT( *_VARIABLES.values() ).WHERE( - QueryBuilder().SELECT( - var_level, - count=Aggregates.COUNT(var_level), - ).WHERE( - (var_level, RDF.type, MoDalia.Proficiency), - (var_level, PropertyPaths.ZeroOrMorePath(MoDalia.isLessProficientThan), Variable("moreProficientLevel")), - ).GROUP_BY( - var_level - ).ORDER_BY( - FunctionExpressions.DESC(Variable("count")) - ).build(), + (var_level, RDF.type, MoDalia.Proficiency), + (var_level, MoDalia.hasOrder, var_level_order), (var_level, RDFS.label, _VARIABLES["label"]), + ).ORDER_BY( + var_level_order ).build() diff --git a/project/dalia/rdf/namespace/MoDalia.py b/project/dalia/rdf/namespace/MoDalia.py index 0144fc9f30f28262788fd31529f1206c83d4bd3b..dc44f1873f452ed22ce432ebd53eedc6d2f9787f 100644 --- a/project/dalia/rdf/namespace/MoDalia.py +++ b/project/dalia/rdf/namespace/MoDalia.py @@ -9,7 +9,7 @@ NS = "https://purl.org/ontology/modalia#" hasLearningType = URIRef(NS + "hasLearningType") hasMediaType = URIRef(NS + "hasMediaType") hasTargetGroup = URIRef(NS + "hasTargetGroup") -isLessProficientThan = URIRef(NS + "isLessProficientThan") +hasOrder = URIRef(NS + "hasOrder") requiresProficiencyLevel = URIRef(NS + "requiresProficiencyLevel") # Types diff --git a/tests/project/dalia/curation/suggest/test_proficiency_levels.py b/tests/project/dalia/curation/suggest/test_proficiency_levels.py index c9ace5fd809999df45f27292b040bf68ac4feb0e..a61130e7616f61dcc9e988d581458e4968832e17 100644 --- a/tests/project/dalia/curation/suggest/test_proficiency_levels.py +++ b/tests/project/dalia/curation/suggest/test_proficiency_levels.py @@ -13,17 +13,11 @@ def test_prepare_query_to_get_proficiency_levels(): assert normalize(query) == dedent_and_normalize(""" SELECT ?level ?label WHERE { - { - SELECT ?level (COUNT( ?level ) as ?count) - WHERE { ?level <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://purl.org/ontology/modalia#Proficiency> . - ?level <https://purl.org/ontology/modalia#isLessProficientThan>* ?moreProficientLevel . - } - GROUP BY ?level - ORDER BY DESC ( ?count ) - } + ?level <https://purl.org/ontology/modalia#hasOrder> ?levelOrder . ?level <http://www.w3.org/2000/01/rdf-schema#label> ?label . } + ORDER BY ?levelOrder """)