Skip to content

SchemeDirectedDocumentLoader

Document loader that dispatches to per-scheme loaders.

Constructed as keyword arguments mapping each URL scheme name to a DocumentLoader instance. Non-identifier scheme names can be passed via SchemeDirectedDocumentLoader(**{'view-source': loader}).

An unregistered scheme raises JsonLdError with code loading document failed and details naming the registered schemes.

Parameters:

Name Type Description Default
loaders DocumentLoader

keyword mapping of scheme name to document loader.

{}

Compose per-scheme loaders so a local document can resolve a remote @context:

Example scheme_directed.py

import json
from pathlib import Path

from pyld import (
    SchemeDirectedDocumentLoader,
    FileDocumentLoader,
    FrozenDocumentLoader,
    jsonld,
)

person = (
    Path(__file__).resolve().parent.parent / 'data' / 'person_remote_context.jsonld'
)

http = FrozenDocumentLoader(
    documents={
        'https://example.com/context': {
            '@context': {'name': 'http://schema.org/name'},
        },
    }
)
loader = SchemeDirectedDocumentLoader(
    file=FileDocumentLoader(),
    http=http,
    https=http,
)
result = jsonld.expand(
    person.as_uri(),
    options={'documentLoader': loader},
)
print(json.dumps(result, indent=2))
Output
[
  {
    "http://schema.org/name": [
      {
        "@value": "Ada Lovelace"
      }
    ]
  }
]

Source person_remote_context.jsonld

{
  "@context": "https://example.com/context",
  "name": "Ada Lovelace"
}