Skip to content
Snippets Groups Projects
Commit 00e24c43 authored by Frank Lange's avatar Frank Lange
Browse files

move information on label retrieval to FacetObject

parent d0f8f964
No related branches found
No related tags found
No related merge requests found
from typing import Callable, Dict from typing import Callable, Dict
from rdflib import DCTERMS, URIRef, XSD from rdflib import DCTERMS, SKOS, URIRef, XSD
from rdflib.term import Literal, Node from rdflib.term import Node
from project.dalia.rdf.namespace import MoDalia, SCHEMA, bibo, hcrt from project.dalia.query.labels.label_service import VAR_ITEM, VAR_LABEL
from project.dalia.query.utils import Dataset, filter_by_lang
from project.dalia.rdf.namespace import MoDalia, SCHEMA, SKOS_last_call, bibo, hcrt
class FacetObject: class FacetObject:
...@@ -18,17 +20,22 @@ class FacetObject: ...@@ -18,17 +20,22 @@ class FacetObject:
This class could not be rewritten as frozen dataclass because the items field is mutable (there are no frozen This class could not be rewritten as frozen dataclass because the items field is mutable (there are no frozen
dicts). dicts).
""" """
def __init__( def __init__(
self, self,
label: str, label: str,
key: URIRef, key: URIRef,
predicate: URIRef, predicate: URIRef,
label_dataset: Dataset,
label_graph_pattern: tuple,
items: Dict[Node, str], items: Dict[Node, str],
selected_facet_initializer: Callable[[str], Node] selected_facet_initializer: Callable[[str], Node]
): ):
self.label = label self.label = label
self.key = key self.key = key
self.predicate = predicate self.predicate = predicate
self.label_dataset = label_dataset
self.label_graph_pattern = label_graph_pattern
self.items = items self.items = items
self.selected_facet_initializer = selected_facet_initializer self.selected_facet_initializer = selected_facet_initializer
...@@ -37,6 +44,11 @@ TARGET_AUDIENCE_FACET = FacetObject( ...@@ -37,6 +44,11 @@ TARGET_AUDIENCE_FACET = FacetObject(
label="Target Audience", label="Target Audience",
key=MoDalia.TargetGroup, key=MoDalia.TargetGroup,
predicate=MoDalia.hasTargetGroup, predicate=MoDalia.hasTargetGroup,
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
),
items={ items={
MoDalia.StudentSchool: "Student (School)", MoDalia.StudentSchool: "Student (School)",
MoDalia.BachelorStudent: "Bachelor Student", MoDalia.BachelorStudent: "Bachelor Student",
...@@ -55,6 +67,11 @@ MEDIA_TYPE_FACET = FacetObject( ...@@ -55,6 +67,11 @@ MEDIA_TYPE_FACET = FacetObject(
label="Media Type", label="Media Type",
key=MoDalia.MediaType, key=MoDalia.MediaType,
predicate=MoDalia.hasMediaType, predicate=MoDalia.hasMediaType,
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
),
items={ items={
SCHEMA.AudioObject: "Audio", SCHEMA.AudioObject: "Audio",
MoDalia.Code: "Code", MoDalia.Code: "Code",
...@@ -71,6 +88,11 @@ LEARNING_RESOURCE_TYPE_FACET = FacetObject( ...@@ -71,6 +88,11 @@ LEARNING_RESOURCE_TYPE_FACET = FacetObject(
label="Learning Resource Type", label="Learning Resource Type",
key=MoDalia.LearningResourceType, key=MoDalia.LearningResourceType,
predicate=MoDalia.hasLearningType, predicate=MoDalia.hasLearningType,
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
),
items={ items={
bibo.Article: "Article", bibo.Article: "Article",
hcrt.assessment: "Assessment", hcrt.assessment: "Assessment",
...@@ -103,6 +125,11 @@ LANGUAGE_FACET = FacetObject( ...@@ -103,6 +125,11 @@ LANGUAGE_FACET = FacetObject(
label="Language", label="Language",
key=XSD.language, key=XSD.language,
predicate=DCTERMS.language, predicate=DCTERMS.language,
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(
(VAR_ITEM, SKOS_last_call.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
),
items={ items={
URIRef("http://lexvo.org/id/iso639-3/eng"): "English", URIRef("http://lexvo.org/id/iso639-3/eng"): "English",
URIRef("http://lexvo.org/id/iso639-3/fra"): "French", URIRef("http://lexvo.org/id/iso639-3/fra"): "French",
......
...@@ -3,9 +3,10 @@ from typing import Collection, Dict, List ...@@ -3,9 +3,10 @@ from typing import Collection, Dict, List
from rdflib import DCTERMS, URIRef from rdflib import DCTERMS, URIRef
from rdflib.term import Node from rdflib.term import Node
from project.dalia.query.items.facets.facet_objects import LANGUAGE_FACET
from project.dalia.query.items.metadata.one_to_many_metadata import get_one_to_many_metadata_for_resources from project.dalia.query.items.metadata.one_to_many_metadata import get_one_to_many_metadata_for_resources
from project.dalia.query.labels.label_service import VAR_ITEM, VAR_LABEL, get_labels_for_item_uris from project.dalia.query.labels.label_service import VAR_ITEM, VAR_LABEL, get_labels_for_item_uris_for_facet
from project.dalia.query.utils import Dataset, filter_by_lang from project.dalia.query.utils import filter_by_lang
from project.dalia.rdf.namespace import SKOS_last_call from project.dalia.rdf.namespace import SKOS_last_call
_LABEL_GRAPH_PATTERN = ( _LABEL_GRAPH_PATTERN = (
...@@ -15,7 +16,7 @@ _LABEL_GRAPH_PATTERN = ( ...@@ -15,7 +16,7 @@ _LABEL_GRAPH_PATTERN = (
def _map_language_uris_to_string_label(items: Collection[Node]) -> Dict[Node, str]: def _map_language_uris_to_string_label(items: Collection[Node]) -> Dict[Node, str]:
return get_labels_for_item_uris(items, Dataset.ONTOLOGIES, _LABEL_GRAPH_PATTERN) return get_labels_for_item_uris_for_facet(items, LANGUAGE_FACET)
def get_languages_for_resources(resource_uri_refs: List[URIRef]) -> Dict[URIRef, List[str]]: def get_languages_for_resources(resource_uri_refs: List[URIRef]) -> Dict[URIRef, List[str]]:
......
from typing import Collection, Dict, List from typing import Collection, Dict, List
from rdflib import SKOS, URIRef from rdflib import URIRef
from rdflib.term import Node from rdflib.term import Node
from project.dalia.api_models.api_models import LabelValueItem from project.dalia.api_models.api_models import LabelValueItem
from project.dalia.query.items.facets.facet_objects import LEARNING_RESOURCE_TYPE_FACET
from project.dalia.query.items.metadata.one_to_many_metadata import get_one_to_many_metadata_for_resources from project.dalia.query.items.metadata.one_to_many_metadata import get_one_to_many_metadata_for_resources
from project.dalia.query.labels.label_service import VAR_ITEM, VAR_LABEL, get_labels_for_item_uris from project.dalia.query.labels.label_service import get_labels_for_item_uris_for_facet
from project.dalia.query.labels.utils import remap_to_label_value_item from project.dalia.query.labels.utils import remap_to_label_value_item
from project.dalia.query.utils import Dataset, filter_by_lang
from project.dalia.rdf.namespace import MoDalia from project.dalia.rdf.namespace import MoDalia
_LABEL_GRAPH_PATTERN = (
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
)
def _map_learning_resource_type_uris_to_label_value_items(items: Collection[Node]) -> Dict[Node, LabelValueItem]: def _map_learning_resource_type_uris_to_label_value_items(items: Collection[Node]) -> Dict[Node, LabelValueItem]:
mapping = get_labels_for_item_uris(items, Dataset.ONTOLOGIES, _LABEL_GRAPH_PATTERN) mapping = get_labels_for_item_uris_for_facet(items, LEARNING_RESOURCE_TYPE_FACET)
return remap_to_label_value_item(mapping) return remap_to_label_value_item(mapping)
......
from typing import Collection, Dict, List from typing import Collection, Dict, List
from rdflib import SKOS, URIRef from rdflib import URIRef
from rdflib.term import Node from rdflib.term import Node
from project.dalia.api_models.api_models import LabelValueItem from project.dalia.api_models.api_models import LabelValueItem
from project.dalia.query.items.facets.facet_objects import MEDIA_TYPE_FACET
from project.dalia.query.items.metadata.one_to_many_metadata import get_one_to_many_metadata_for_resources from project.dalia.query.items.metadata.one_to_many_metadata import get_one_to_many_metadata_for_resources
from project.dalia.query.labels.label_service import VAR_ITEM, VAR_LABEL, get_labels_for_item_uris from project.dalia.query.labels.label_service import get_labels_for_item_uris_for_facet
from project.dalia.query.labels.utils import remap_to_label_value_item from project.dalia.query.labels.utils import remap_to_label_value_item
from project.dalia.query.utils import Dataset, filter_by_lang
from project.dalia.rdf.namespace import MoDalia from project.dalia.rdf.namespace import MoDalia
_LABEL_GRAPH_PATTERN = (
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
)
def _map_media_type_uris_to_label_value_items(items: Collection[Node]) -> Dict[Node, LabelValueItem]: def _map_media_type_uris_to_label_value_items(items: Collection[Node]) -> Dict[Node, LabelValueItem]:
mapping = get_labels_for_item_uris(items, Dataset.ONTOLOGIES, _LABEL_GRAPH_PATTERN) mapping = get_labels_for_item_uris_for_facet(items, MEDIA_TYPE_FACET)
return remap_to_label_value_item(mapping) return remap_to_label_value_item(mapping)
......
from typing import Collection, Dict, List from typing import Collection, Dict, List
from rdflib import SKOS, URIRef from rdflib import URIRef
from rdflib.term import Node from rdflib.term import Node
from project.dalia.api_models.api_models import LabelValueItem from project.dalia.api_models.api_models import LabelValueItem
from project.dalia.query.items.facets.facet_objects import TARGET_AUDIENCE_FACET
from project.dalia.query.items.metadata.one_to_many_metadata import get_one_to_many_metadata_for_resources from project.dalia.query.items.metadata.one_to_many_metadata import get_one_to_many_metadata_for_resources
from project.dalia.query.labels.label_service import VAR_ITEM, VAR_LABEL, get_labels_for_item_uris from project.dalia.query.labels.label_service import get_labels_for_item_uris_for_facet
from project.dalia.query.labels.utils import remap_to_label_value_item from project.dalia.query.labels.utils import remap_to_label_value_item
from project.dalia.query.utils import Dataset, filter_by_lang
from project.dalia.rdf.namespace import MoDalia from project.dalia.rdf.namespace import MoDalia
_LABEL_GRAPH_PATTERN = (
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
)
def _map_target_group_uris_to_label_value_items(items: Collection[Node]) -> Dict[Node, LabelValueItem]: def _map_target_group_uris_to_label_value_items(items: Collection[Node]) -> Dict[Node, LabelValueItem]:
mapping = get_labels_for_item_uris(items, Dataset.ONTOLOGIES, _LABEL_GRAPH_PATTERN) mapping = get_labels_for_item_uris_for_facet(items, TARGET_AUDIENCE_FACET)
return remap_to_label_value_item(mapping) return remap_to_label_value_item(mapping)
......
...@@ -55,3 +55,15 @@ def get_labels_for_item_uris( ...@@ -55,3 +55,15 @@ def get_labels_for_item_uris(
query = prepare_query_for_labels_from_items(items, graph_pattern, order_by) query = prepare_query_for_labels_from_items(items, graph_pattern, order_by)
results = query_dataset(dataset, query) results = query_dataset(dataset, query)
return _process_results(results) return _process_results(results)
def get_labels_for_item_uris_for_facet(items: Collection[URIRef], facet) -> Dict[URIRef, str]:
"""
Retrieves the labels for the given items and the given facet.
:param items: URIRefs of the items
:param facet: facet definition
:return: Associations between the item URIRefs and their respective label. The insertion order of this dictionary
reflects the specified order.
"""
return get_labels_for_item_uris(items, facet.label_dataset, facet.label_graph_pattern)
...@@ -3,9 +3,11 @@ from rdflib import URIRef ...@@ -3,9 +3,11 @@ from rdflib import URIRef
from rest_framework import status from rest_framework import status
from project.dalia.api_models.api_models import BasicSearchFilter, BasicSearchFilterKey, BasicSearchFilterValue from project.dalia.api_models.api_models import BasicSearchFilter, BasicSearchFilterKey, BasicSearchFilterValue
from project.dalia.query.items.basic_search_filters.basic_search_filters import \ from project.dalia.query.items.basic_search_filters.basic_search_filters import (
prepare_query_to_get_all_existing_filter_items_for_facet prepare_query_to_get_all_existing_filter_items_for_facet,
)
from project.dalia.query.items.facets.facet_objects import FacetObject from project.dalia.query.items.facets.facet_objects import FacetObject
from project.dalia.query.utils import Dataset
from project.dalia.rdf.namespace import MoDalia, SCHEMA, bibo, hcrt from project.dalia.rdf.namespace import MoDalia, SCHEMA, bibo, hcrt
from project.dalia.serializers import BasicSearchFilterSerializer from project.dalia.serializers import BasicSearchFilterSerializer
from tests.project.dalia.utils import dedent_and_normalize, normalize from tests.project.dalia.utils import dedent_and_normalize, normalize
...@@ -14,6 +16,8 @@ _TEST_FACET = FacetObject( ...@@ -14,6 +16,8 @@ _TEST_FACET = FacetObject(
label="Test facet", label="Test facet",
key=URIRef("http://example/testFacet"), key=URIRef("http://example/testFacet"),
predicate=URIRef("http://example/hasTestFacet"), predicate=URIRef("http://example/hasTestFacet"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={ items={
URIRef("http://example/testFacetItem1"): "Item 1", URIRef("http://example/testFacetItem1"): "Item 1",
URIRef("http://example/testFacetItem2"): "Item 2", URIRef("http://example/testFacetItem2"): "Item 2",
......
from rdflib import Literal, URIRef from rdflib import Literal, URIRef
from project.dalia.query.items.facets.facet_objects import FacetObject from project.dalia.query.items.facets.facet_objects import FacetObject
from project.dalia.query.utils import Dataset
TEST_FACET1 = FacetObject( TEST_FACET1 = FacetObject(
label="facet1", label="facet1",
key=URIRef("facet1-key"), key=URIRef("facet1-key"),
predicate=URIRef("facet1-predicate"), predicate=URIRef("facet1-predicate"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={ items={
URIRef("facet1-item1"): "", URIRef("facet1-item1"): "",
URIRef("facet1-item2"): "", URIRef("facet1-item2"): "",
...@@ -18,6 +21,8 @@ TEST_FACET2 = FacetObject( ...@@ -18,6 +21,8 @@ TEST_FACET2 = FacetObject(
label="facet2", label="facet2",
key=URIRef("facet2-key"), key=URIRef("facet2-key"),
predicate=URIRef("facet2-predicate"), predicate=URIRef("facet2-predicate"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={ items={
URIRef("facet2-item1"): "", URIRef("facet2-item1"): "",
}, },
...@@ -27,6 +32,8 @@ TEST_FACET3 = FacetObject( ...@@ -27,6 +32,8 @@ TEST_FACET3 = FacetObject(
label="facet3", label="facet3",
key=URIRef("facet3-key"), key=URIRef("facet3-key"),
predicate=URIRef("facet3-predicate"), predicate=URIRef("facet3-predicate"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={ items={
URIRef("facet3-item1"): "", URIRef("facet3-item1"): "",
URIRef("facet3-item2"): "", URIRef("facet3-item2"): "",
...@@ -37,6 +44,8 @@ TEST_FACET4 = FacetObject( ...@@ -37,6 +44,8 @@ TEST_FACET4 = FacetObject(
label="facet4", label="facet4",
key=URIRef("facet4-key"), key=URIRef("facet4-key"),
predicate=URIRef("facet4-predicate"), predicate=URIRef("facet4-predicate"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={ items={
Literal("facet4-item1"): "", Literal("facet4-item1"): "",
Literal("facet4-item2"): "", Literal("facet4-item2"): "",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment