Skip to content
Back to top
View this page

# Work with PROV-N

Important

PROV-N is write-only. `prov` can produce PROV-N text, but there is no parser: deserializing PROV-N raises `NotImplementedError`. If you need to read a document back, save it in PROV-JSON, PROV-XML, or PROV-O/RDF instead.

PROV-N needs no extra dependency.

## Get the PROV-N text directly

`get_provn()` returns the notation as a string without going through the serializer registry at all — this is the simplest way to print or inspect it:

    import prov.model as pm

    document = pm.ProvDocument()
    document.set_default_namespace("http://example.org/")
    e = document.entity("e1")
    a = document.activity("a1")
    document.wasGeneratedBy(e, a)

    print(document.get_provn())

## Serialize to a file

`format="provn"` goes through the same `serialize()` API as the other formats, for consistency with tooling that dispatches on `format`:

    document.serialize("document.provn", format="provn")

## Serialize to a string

    provn_str = document.serialize(format="provn")
    assert provn_str == document.get_provn()

## Deserializing raises `NotImplementedError`

There is no PROV-N reader, in the library or via `prov.read()`’s auto-detection:

    try:
        pm.ProvDocument.deserialize("document.provn", format="provn")
    except NotImplementedError:
        print("PROV-N has no deserializer")

If your workflow needs a round trip, keep a PROV-JSON (or PROV-XML/RDF) copy alongside any PROV-N output — see Work with PROV-JSON.