Type Hints
The ontolutils.typing module provides specialized type hints and validators for working with RDF/IRI data in ontolutils. These types help ensure type safety when working with IRIs, URIs, and Thing instances.
Core Types
IRI and ID Types
The module provides several annotated types for validating IRIs and IDs:
- AnyIri
Accepts HTTP/HTTPS URLs, blank nodes (starting with
_:), pydanticAnyUrlobjects,URIReforBNodeinstances.- IdType
Similar to
AnyIribut also accepts URN and file URLs.- NoneBlankNodeType
Same as
IdTypebut explicitly rejects blank nodes.- BlankNodeType
Only accepts blank node strings (must start with
_:).
from ontolutils.typing import AnyIri, IdType, NoneBlankNodeType, BlankNodeType
from pydantic import BaseModel
class MyModel(BaseModel):
iri_field: AnyIri
id_field: IdType
no_blank: NoneBlankNodeType
blank_only: BlankNodeType
# Valid usage
model = MyModel(
iri_field="https://example.org/resource",
id_field="urn:uuid:1234-5678",
no_blank="https://example.org/resource",
blank_only="_:myblanknode"
)
Generic Type Aliases
The module provides several generic type aliases for common patterns:
- AnyThing
Union of a Thing instance or an IRI.
- AnyThingOf[T]
Union of type T, a Thing instance, or an IRI.
- AnyThingOrList
Union of a Thing instance, an IRI, or a list of those.
- IriList
An IRI or a list of IRIs.
- AnyIriOf[T]
Union of type T or an IRI.
- AnyIriOrListOf[T]
Union of an IRI, type T, or a list containing T or IRIs.
from ontolutils.typing import AnyThing, AnyThingOf, AnyThingOrList, IriList
from ontolutils import Thing
class Person(Thing):
name: str
class MyModel(BaseModel):
thing_field: AnyThing # Person instance or IRI
person_or_iri: AnyThingOf[Person] # Person, IRI, or Thing
multiple: AnyThingOrList # Single or list of Things/IRIs
iri_list: IriList # Single IRI or list of IRIs
Runtime Type Factories
The module provides factory functions for creating runtime-safe type annotations that avoid unresolved TypeVars:
- make_type_or_list(*types)
Creates a typing object equivalent to
Union[<types...>, AnyIri, List[Union[<types...>, AnyIri]]].- make_optional_type_or_list(*types)
Creates an optional variant of
make_type_or_list.
from ontolutils.typing import make_type_or_list, make_optional_type_or_list
# Create a type that accepts Person, IRIs, or lists of those
PersonOrIriOrList = make_type_or_list(Person)
class MyModel(BaseModel):
person_field: PersonOrIriOrList
optional_person: make_optional_type_or_list(Person)
# These are all valid:
model1 = MyModel(person_field=Person(name="John"))
model2 = MyModel(person_field="https://example.org/person/1")
model3 = MyModel(person_field=[Person(name="Jane"), "https://example.org/person/2"])
Deprecated ResourceType
ResourceType is deprecated but still available for backward compatibility. It provides runtime validation for resources that can be instances of allowed types or IRIs.
from ontolutils.typing import ResourceType
import warnings
# This will emit a deprecation warning
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
class MyModel(BaseModel):
resource: ResourceType[Person] # Accepts Person instances or IRIs
# Prefer using make_type_or_list instead:
PersonOrIri = make_type_or_list(Person)
class BetterModel(BaseModel):
resource: PersonOrIri
Validation Behavior
The type validators perform the following checks:
IRI validation: Accepts HTTP/HTTPS URLs, blank nodes, pydantic URL objects, URIRef, and BNode instances
ID validation: Same as IRI validation plus URN and file URL schemes
Blank node validation: Ensures blank nodes start with
_:prefixList handling: All validators automatically handle both single values and lists
Error messages include field names when available to help identify validation issues.
Integration with Pydantic
All types are designed to work seamlessly with pydantic models:
Automatic validation during model construction
Proper serialization to JSON-LD and other formats
Type checking support for static analysis tools
Runtime-safe type annotations that avoid TypeVar issues
The types integrate with ontolutils’ serialization system, ensuring that IRI fields are properly formatted in RDF output formats.