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 rdflib import DCTERMS, URIRef, XSD
from rdflib.term import Literal, Node
from rdflib import DCTERMS, SKOS, URIRef, XSD
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:
......@@ -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
dicts).
"""
def __init__(
self,
label: str,
key: URIRef,
predicate: URIRef,
label_dataset: Dataset,
label_graph_pattern: tuple,
items: Dict[Node, str],
selected_facet_initializer: Callable[[str], Node]
):
self.label = label
self.key = key
self.predicate = predicate
self.label_dataset = label_dataset
self.label_graph_pattern = label_graph_pattern
self.items = items
self.selected_facet_initializer = selected_facet_initializer
......@@ -37,6 +44,11 @@ TARGET_AUDIENCE_FACET = FacetObject(
label="Target Audience",
key=MoDalia.TargetGroup,
predicate=MoDalia.hasTargetGroup,
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
),
items={
MoDalia.StudentSchool: "Student (School)",
MoDalia.BachelorStudent: "Bachelor Student",
......@@ -55,6 +67,11 @@ MEDIA_TYPE_FACET = FacetObject(
label="Media Type",
key=MoDalia.MediaType,
predicate=MoDalia.hasMediaType,
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
),
items={
SCHEMA.AudioObject: "Audio",
MoDalia.Code: "Code",
......@@ -71,6 +88,11 @@ LEARNING_RESOURCE_TYPE_FACET = FacetObject(
label="Learning Resource Type",
key=MoDalia.LearningResourceType,
predicate=MoDalia.hasLearningType,
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(
(VAR_ITEM, SKOS.prefLabel, VAR_LABEL),
filter_by_lang(VAR_LABEL),
),
items={
bibo.Article: "Article",
hcrt.assessment: "Assessment",
......@@ -103,6 +125,11 @@ LANGUAGE_FACET = FacetObject(
label="Language",
key=XSD.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={
URIRef("http://lexvo.org/id/iso639-3/eng"): "English",
URIRef("http://lexvo.org/id/iso639-3/fra"): "French",
......
......@@ -3,9 +3,10 @@ from typing import Collection, Dict, List
from rdflib import DCTERMS, URIRef
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.labels.label_service import VAR_ITEM, VAR_LABEL, get_labels_for_item_uris
from project.dalia.query.utils import Dataset, filter_by_lang
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 filter_by_lang
from project.dalia.rdf.namespace import SKOS_last_call
_LABEL_GRAPH_PATTERN = (
......@@ -15,7 +16,7 @@ _LABEL_GRAPH_PATTERN = (
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]]:
......
from typing import Collection, Dict, List
from rdflib import SKOS, URIRef
from rdflib import URIRef
from rdflib.term import Node
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.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.utils import Dataset, filter_by_lang
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]:
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)
......
from typing import Collection, Dict, List
from rdflib import SKOS, URIRef
from rdflib import URIRef
from rdflib.term import Node
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.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.utils import Dataset, filter_by_lang
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]:
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)
......
from typing import Collection, Dict, List
from rdflib import SKOS, URIRef
from rdflib import URIRef
from rdflib.term import Node
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.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.utils import Dataset, filter_by_lang
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]:
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)
......
......@@ -55,3 +55,15 @@ def get_labels_for_item_uris(
query = prepare_query_for_labels_from_items(items, graph_pattern, order_by)
results = query_dataset(dataset, query)
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
from rest_framework import status
from project.dalia.api_models.api_models import BasicSearchFilter, BasicSearchFilterKey, BasicSearchFilterValue
from project.dalia.query.items.basic_search_filters.basic_search_filters import \
prepare_query_to_get_all_existing_filter_items_for_facet
from project.dalia.query.items.basic_search_filters.basic_search_filters import (
prepare_query_to_get_all_existing_filter_items_for_facet,
)
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.serializers import BasicSearchFilterSerializer
from tests.project.dalia.utils import dedent_and_normalize, normalize
......@@ -14,6 +16,8 @@ _TEST_FACET = FacetObject(
label="Test facet",
key=URIRef("http://example/testFacet"),
predicate=URIRef("http://example/hasTestFacet"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={
URIRef("http://example/testFacetItem1"): "Item 1",
URIRef("http://example/testFacetItem2"): "Item 2",
......
from rdflib import Literal, URIRef
from project.dalia.query.items.facets.facet_objects import FacetObject
from project.dalia.query.utils import Dataset
TEST_FACET1 = FacetObject(
label="facet1",
key=URIRef("facet1-key"),
predicate=URIRef("facet1-predicate"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={
URIRef("facet1-item1"): "",
URIRef("facet1-item2"): "",
......@@ -18,6 +21,8 @@ TEST_FACET2 = FacetObject(
label="facet2",
key=URIRef("facet2-key"),
predicate=URIRef("facet2-predicate"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={
URIRef("facet2-item1"): "",
},
......@@ -27,6 +32,8 @@ TEST_FACET3 = FacetObject(
label="facet3",
key=URIRef("facet3-key"),
predicate=URIRef("facet3-predicate"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={
URIRef("facet3-item1"): "",
URIRef("facet3-item2"): "",
......@@ -37,6 +44,8 @@ TEST_FACET4 = FacetObject(
label="facet4",
key=URIRef("facet4-key"),
predicate=URIRef("facet4-predicate"),
label_dataset=Dataset.ONTOLOGIES,
label_graph_pattern=(),
items={
Literal("facet4-item1"): "",
Literal("facet4-item2"): "",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment