diff --git a/docs/storage-backends.md b/docs/storage-backends.md index 689002fb..bb05e115 100644 --- a/docs/storage-backends.md +++ b/docs/storage-backends.md @@ -15,13 +15,15 @@ This page is intentionally conservative: it distinguishes between an adapter exi | Backend | Model | Adapter | Status | Reference | | --- | --- | --- | --- | --- | -| Neo4j | LPG | `semantica.graph_store.Neo4jGraphStore` | built-in | `cookbook/introduction/09_Graph_Store.ipynb` | -| Amazon Neptune | LPG | `semantica.graph_store.NeptuneGraphStore` | built-in | `cookbook/introduction/21_Amazon_Neptune_Store.ipynb` | -| Apache AGE | LPG | `semantica.graph_store.AgeGraphStore` | built-in | `docs/graph_stores/apache_age.md` | +| Neo4j | LPG | `semantica.graph_store.Neo4jStore` | built-in | `cookbook/introduction/09_Graph_Store.ipynb` | +| FalkorDB | LPG | `semantica.graph_store.FalkorDBStore` | built-in | `docs/reference/graph_store.md` | +| Amazon Neptune | LPG | `semantica.graph_store.AmazonNeptuneStore` | built-in | `cookbook/introduction/21_Amazon_Neptune_Store.ipynb` | +| Apache AGE | LPG | `semantica.graph_store.ApacheAgeStore` | built-in | `docs/graph_stores/apache_age.md` | | RDF4J | RDF | `semantica.triplet_store.RDF4JStore` | built-in | `cookbook/introduction/20_Triplet_Store.ipynb` | | Apache Jena | RDF | `semantica.triplet_store.JenaStore` | built-in | `cookbook/introduction/20_Triplet_Store.ipynb` | | Blazegraph | RDF | `semantica.triplet_store.BlazegraphStore` | built-in | `cookbook/introduction/20_Triplet_Store.ipynb` | -| Anzo | RDF | `semantica.triplet_store.AnzoStore` | interface/BYO | `cookbook/introduction/20_Triplet_Store.ipynb` | +| Anzo | RDF | `semantica.triplet_store.AnzoStore` | built-in | `cookbook/introduction/20_Triplet_Store.ipynb` | +| Oxigraph | RDF | `semantica.triplet_store.OxigraphStore` | built-in | `docs/reference/triplet_store.md` | ## Feature matrix @@ -30,12 +32,14 @@ This page is intentionally conservative: it distinguishes between an adapter exi | Backend | Model | Ingestion | Context graph construction | Reasoning/analytics | Provenance | Known limitations | | --- | --- | --- | --- | --- | --- | --- | | Neo4j | LPG | Yes | Yes | Yes | Partial | Provenance and context metadata are stored as node and edge properties; relationship properties and stable node identifiers are required. | +| FalkorDB | LPG | Yes | Yes | Partial | Partial | Redis-based; provenance depends on node/edge properties, and multi-graph isolation depends on the selected graph name. | | Amazon Neptune | LPG | Yes | Yes | Partial | Partial | Use the property-graph endpoint; AWS auth, VPC, and endpoint configuration can affect local tests. Provenance depends on node/edge properties. | | Apache AGE | LPG | Yes | Yes | Partial | Partial | Runs through PostgreSQL/AGE; Cypher compatibility and property handling can differ from standalone LPG engines. | -| RDF4J | RDF | Yes | Partial | Partial | Partial | Context separation relies on named graphs; triple-level provenance may require reification or graph-level metadata. | +| RDF4J | RDF | Yes | Partial | Partial | Partial | Context separation relies on named graphs; triple-level provenance may require reification or graph-level metadata. `RDF4JStore(repository_id=...)` currently has no effect — the constructor always connects to the `"default"` repository regardless of the value passed; track a fix separately. | | Apache Jena | RDF | Yes | Partial | Partial | Partial | Named graphs are needed for context separation; backend configuration and transaction behavior matter. | | Blazegraph | RDF | Yes | Partial | Partial | Partial | Use quads/named graphs for context; IRI stability and graph naming matter for provenance. | -| Anzo | RDF | BYO | BYO | BYO | BYO | Anzo deployments are environment-specific; validate repository/graph naming, named-graph support, and provenance mapping. | +| Anzo | RDF | Yes | Partial | Partial | Partial | Anzo deployments are environment-specific; validate `dataset_uri`/graphmart naming, named-graph support, and provenance mapping. | +| Oxigraph | RDF | Yes | Partial | Partial | Partial | Embedded, single-process store (in-memory or on-disk); named graphs are supported, but there is no separate server process to scale independently. | ## RDF and LPG differences @@ -51,34 +55,48 @@ Prefer the referenced notebook cells for a working setup. The examples below sho ### Neo4j ```python -from semantica.graph_store import Neo4jGraphStore +import os +from semantica.graph_store import Neo4jStore -store = Neo4jGraphStore( +store = Neo4jStore( uri='bolt://localhost:7687', - username='neo4j', - password='password' + user='neo4j', + password=os.environ['NEO4J_PASSWORD'] +) +``` + +### FalkorDB + +```python +from semantica.graph_store import FalkorDBStore + +store = FalkorDBStore( + host='localhost', + port=6379, + graph_name='semantica' ) ``` ### Amazon Neptune ```python -from semantica.graph_store import NeptuneGraphStore +from semantica.graph_store import AmazonNeptuneStore -store = NeptuneGraphStore( - host='your-neptune-endpoint', - port=8182 +store = AmazonNeptuneStore( + endpoint='your-neptune-cluster-endpoint', + port=8182, + region='us-east-1' ) ``` ### Apache AGE ```python -from semantica.graph_store import AgeGraphStore +from semantica.graph_store import ApacheAgeStore -store = AgeGraphStore( - dsn='postgresql://user:password@localhost:5432/semantica', - graph='semantica' +store = ApacheAgeStore( + connection_string='host=localhost dbname=agedb user=postgres password=postgres', + graph_name='semantica' ) ``` @@ -88,8 +106,8 @@ store = AgeGraphStore( from semantica.triplet_store import RDF4JStore store = RDF4JStore( - url='http://localhost:8080/rdf4j-server', - repository='semantica' + endpoint='http://localhost:8080/rdf4j-server', + repository_id='semantica' # currently has no effect; connects to "default" (see Known limitations) ) ``` @@ -99,8 +117,7 @@ store = RDF4JStore( from semantica.triplet_store import JenaStore store = JenaStore( - url='http://localhost:3030', - dataset='semantica' + endpoint='http://localhost:3030/ds' ) ``` @@ -110,7 +127,7 @@ store = JenaStore( from semantica.triplet_store import BlazegraphStore store = BlazegraphStore( - url='http://localhost:9999/blazegraph/sparql' + endpoint='http://localhost:9999/blazegraph/sparql' ) ``` @@ -120,9 +137,18 @@ store = BlazegraphStore( from semantica.triplet_store import AnzoStore store = AnzoStore( - url='http://anzo-host:10000', - repository='semantica' + endpoint='http://anzo-host:8080', + dataset_uri='http://cambridgesemantics.com/Graphmart/your-graphmart-id' ) ``` +### Oxigraph + +```python +from semantica.triplet_store import OxigraphStore + +# Omit `path` for an in-memory store; pass a directory for on-disk persistence. +store = OxigraphStore(path='./semantica-oxigraph-data') +``` + Replace hostnames, ports, repositories, graphs, and credentials with values from your environment. For regulated or self-hosted deployments, keep credentials in environment variables or secret storage rather than source code.