Source code for dartfx.rdf.pydantic.skos

"""SKOS (Simple Knowledge Organization System) vocabulary using Pydantic RDF models.

This module provides Pydantic-based models for the SKOS vocabulary,
allowing easy serialization to and from RDF formats.

References:
- https://www.w3.org/2004/02/skos/
- https://www.w3.org/TR/skos-reference/

"""

from __future__ import annotations

from typing import Annotated, cast

from rdflib import SKOS, Namespace, URIRef

from ._base import LocalizedStr, RdfBaseModel, RdfProperty


[docs] class SkosResource(RdfBaseModel): """Base class for SKOS resources.""" rdf_namespace = cast(Namespace, SKOS) rdf_prefixes = {"skos": cast(Namespace, SKOS)}
SKOSXL = Namespace("http://www.w3.org/2008/05/skos-xl#")
[docs] class Label(SkosResource): """A SKOS-XL Label.""" rdf_type = SKOSXL.Label rdf_namespace = SKOSXL rdf_prefixes = {"skosxl": SKOSXL} literal_form: Annotated[str, RdfProperty(SKOSXL.literalForm)]
[docs] class ConceptScheme(SkosResource): """A SKOS Concept Scheme - an aggregation of one or more SKOS concepts.""" rdf_type = SKOS.ConceptScheme id: str # Lexical labels pref_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.prefLabel), ] = None alt_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.altLabel), ] = None hidden_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.hiddenLabel), ] = None # SKOS-XL labels pref_label_xl: Annotated[ str | URIRef | Label | list[str | URIRef | Label] | None, RdfProperty(SKOSXL.prefLabel) ] = None alt_label_xl: Annotated[str | URIRef | Label | list[str | URIRef | Label] | None, RdfProperty(SKOSXL.altLabel)] = ( None ) hidden_label_xl: Annotated[ str | URIRef | Label | list[str | URIRef | Label] | None, RdfProperty(SKOSXL.hiddenLabel) ] = None # Documentation properties notation: Annotated[str | list[str] | None, RdfProperty(SKOS.notation)] = None note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.note), ] = None change_note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.changeNote), ] = None definition: Annotated[ LocalizedStr | None, RdfProperty(SKOS.definition), ] = None editorial_note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.editorialNote), ] = None example: Annotated[ LocalizedStr | None, RdfProperty(SKOS.example), ] = None history_note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.historyNote), ] = None scope_note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.scopeNote), ] = None # Scheme relationships has_top_concept: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.hasTopConcept) ] = None
[docs] class Concept(SkosResource): """A SKOS Concept - a unit of thought.""" rdf_type = SKOS.Concept id: str # Lexical labels pref_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.prefLabel), ] = None alt_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.altLabel), ] = None hidden_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.hiddenLabel), ] = None # SKOS-XL labels pref_label_xl: Annotated[ str | URIRef | Label | list[str | URIRef | Label] | None, RdfProperty(SKOSXL.prefLabel) ] = None alt_label_xl: Annotated[str | URIRef | Label | list[str | URIRef | Label] | None, RdfProperty(SKOSXL.altLabel)] = ( None ) hidden_label_xl: Annotated[ str | URIRef | Label | list[str | URIRef | Label] | None, RdfProperty(SKOSXL.hiddenLabel) ] = None # Documentation properties notation: Annotated[str | list[str] | None, RdfProperty(SKOS.notation)] = None note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.note), ] = None change_note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.changeNote), ] = None definition: Annotated[ LocalizedStr | None, RdfProperty(SKOS.definition), ] = None editorial_note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.editorialNote), ] = None example: Annotated[ LocalizedStr | None, RdfProperty(SKOS.example), ] = None history_note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.historyNote), ] = None scope_note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.scopeNote), ] = None # Scheme membership in_scheme: Annotated[ str | URIRef | ConceptScheme | list[str | URIRef | ConceptScheme] | None, RdfProperty(SKOS.inScheme) ] = None top_concept_of: Annotated[ str | URIRef | ConceptScheme | list[str | URIRef | ConceptScheme] | None, RdfProperty(SKOS.topConceptOf) ] = None # Semantic relations (hierarchical) broader: Annotated[str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.broader)] = None narrower: Annotated[str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.narrower)] = None broader_transitive: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.broaderTransitive) ] = None narrower_transitive: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.narrowerTransitive) ] = None # Semantic relations (associative) related: Annotated[str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.related)] = None # Mapping properties close_match: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.closeMatch) ] = None exact_match: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.exactMatch) ] = None broad_match: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.broadMatch) ] = None narrow_match: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.narrowMatch) ] = None related_match: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.relatedMatch) ] = None # Super-properties semantic_relation: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.semanticRelation) ] = None mapping_relation: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.mappingRelation) ] = None
[docs] class Collection(SkosResource): """A SKOS Collection - a meaningful grouping of concepts.""" rdf_type = SKOS.Collection id: str # Lexical labels pref_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.prefLabel), ] = None alt_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.altLabel), ] = None hidden_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.hiddenLabel), ] = None # Documentation properties notation: Annotated[str | list[str] | None, RdfProperty(SKOS.notation)] = None note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.note), ] = None # Collection membership member: Annotated[ str | URIRef | Concept | Collection | list[str | URIRef | Concept | Collection] | None, RdfProperty(SKOS.member), ] = None
[docs] class OrderedCollection(SkosResource): """A SKOS Ordered Collection - an ordered grouping of concepts.""" rdf_type = SKOS.OrderedCollection id: str # Lexical labels pref_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.prefLabel), ] = None alt_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.altLabel), ] = None hidden_label: Annotated[ LocalizedStr | None, RdfProperty(SKOS.hiddenLabel), ] = None # Documentation properties notation: Annotated[str | list[str] | None, RdfProperty(SKOS.notation)] = None note: Annotated[ LocalizedStr | None, RdfProperty(SKOS.note), ] = None # Ordered collection membership member_list: Annotated[ str | URIRef | Concept | list[str | URIRef | Concept] | None, RdfProperty(SKOS.memberList) ] = None
__all__ = [ "SkosResource", "ConceptScheme", "Concept", "Collection", "OrderedCollection", "Label", ]