Examples

Runnable scripts live in the repository examples/ directory on GitHub.

Guide and README snippets that show Output blocks are driven by examples/doc/ (snippets/ + checked-in outputs/). Regenerate with python examples/doc/regenerate_outputs.py from the repo root (PYTHONPATH=src:.).

Full walkthrough (exit_criteria_03.py)

examples/exit_criteria_03.py demonstrates:

  • Dublin Core title with LangString

  • Blank-node Address embed

  • Ordered nick as rdf:List (list[str])

  • sync_to_graph(..., mode="replace") after editing a list field

pip install triplemodel
git clone https://github.com/eddiethedean/triplemodel.git
cd triplemodel
PYTHONPATH=src python examples/exit_criteria_03.py
examples/exit_criteria_03.py
"""0.3.0 exit-criteria demo: DC title @lang, blank-node Address, ordered rdf:List nick."""

from __future__ import annotations


from triplemodel import TripleModel, rdf_field, sync_to_graph
from triplemodel.terms.lang import LangString
from triplemodel.vocab import DC, FOAF

EX = "http://example.org/people/"


class Address(TripleModel):
    class Rdf:
        namespace = "http://example.org/address/"
        type_uri = "http://example.org/Address"
        id_field = "slug"

    slug: str = "home"
    street: str = rdf_field("http://example.org/street")


class Person(TripleModel):
    class Rdf:
        namespace = EX
        type_uri = f"{FOAF}Person"
        id_field = "slug"
        embed = "bnode"
        prefixes = {"foaf": str(FOAF), "dc": str(DC)}

    slug: str
    title: LangString = rdf_field(f"{DC}title")
    nick: list[str] = rdf_field("foaf:nick", default_factory=list)
    address: Address | None = rdf_field("http://example.org/home", default=None)


def main() -> None:
    person = Person(
        slug="alice",
        title=LangString("Alice's profile", "en"),
        nick=["Al", "Alice"],
        address=Address(street="1 Main St"),
    )
    g = person.to_graph()
    restored = Person.from_graph(g, person.subject_uri())
    assert restored.title == LangString("Alice's profile", "en")
    assert restored.nick == ["Al", "Alice"]
    assert restored.address is not None
    assert restored.address.street == "1 Main St"

    person.nick = ["Alice"]
    sync_to_graph(person, g, mode="replace")
    again = Person.from_graph(g, person.subject_uri())
    assert again.nick == ["Alice"]

    print("0.3.0 exit criteria OK")


if __name__ == "__main__":
    main()

README examples

examples/readme_examples.py exercises snippets from the project README (quick start, batch export, encoded subject ids, etc.).

PYTHONPATH=src python examples/readme_examples.py

Nested model with sync (foaf_person_02.py)

examples/foaf_person_02.py shows nested Mailbox (IRI embed), Rdf.prefixes, multiple foaf:nick values via list[str] (RDF list), and clearing foaf:age with sync.

PYTHONPATH=src python examples/foaf_person_02.py

Real-world data (examples/realworld/)

Bundled RDF from public sources (Nobel Prize linked data, DCAT catalogs, Wikidata, Schema.org). Each script maps a concrete integration problem—see examples/realworld/README.md and DATA_SOURCES.md.

PYTHONPATH=src python examples/realworld/nobel_laureates.py
PYTHONPATH=src python examples/realworld/dcat_data_catalog.py
PYTHONPATH=src python examples/realworld/wikidata_capitals.py
PYTHONPATH=src python examples/realworld/schema_org_ngos.py