# `Gno.Store`
[🔗](https://github.com/rdf-elixir/gno/blob/v0.1.0/lib/gno/store.ex#L1)

Base Grax schema for triple stores hosting a `DCATR.Repository`.

Concrete store types are defined by `Gno.Store.Adapter` implementations
(e.g. `Gno.Store.Adapters.Fuseki`). This module provides generic endpoint
resolution and delegates SPARQL operations to the appropriate adapter.

It can also be used directly as a generic adapter for any SPARQL 1.1
protocol-compliant triple store that has no dedicated adapter implementation:

    @prefix gno: <http://gno.app/> .

    <MyStore> a gno:Store
        ; gno:storeQueryEndpoint <http://localhost:7878/query>       # required
        ; gno:storeUpdateEndpoint <http://localhost:7878/update>     # optional
        ; gno:storeGraphStoreEndpoint <http://localhost:7878/store>  # optional
    .

# `t`

```elixir
@type t() :: %Gno.Store{
  __additional_statements__: term(),
  __id__: term(),
  default_graph_semantics_config: term(),
  graph_store_endpoint: term(),
  host: term(),
  port: term(),
  query_endpoint: term(),
  scheme: term(),
  update_endpoint: term(),
  userinfo: term()
}
```

# `adapter_classes`

Returns the list of known store adapter class IRIs.

# `adapters`

Returns the list of available store adapter modules.

# `build`

# `build`

# `build!`

# `build!`

# `build_id`

# `default_graph_iri`

# `endpoint_base`

Returns the base endpoint URL for the store.

Constructed from the store's scheme, host, port, and dataset properties.
Returns `{:error, ...}` if the required properties are missing.

# `endpoint_base!`

# `endpoint_base_with_path`

Returns the base endpoint URL with the given path appended.

# `endpoint_base_with_path!`

# `from`

```elixir
@spec from(Grax.Schema.t()) :: {:ok, t()} | {:error, any()}
```

# `from!`

```elixir
@spec from!(Grax.Schema.t()) :: t()
```

# `graph_semantics`

# `graph_store_endpoint`

Returns the SPARQL Graph Store Protocol endpoint URL for the store.

# `graph_store_endpoint!`

# `load`

```elixir
@spec load(
  RDF.Graph.t() | RDF.Description.t(),
  RDF.IRI.coercible() | RDF.BlankNode.t(),
  opts :: keyword()
) :: {:ok, t()} | {:error, any()}
```

# `load!`

```elixir
@spec load!(
  RDF.Graph.t() | RDF.Description.t(),
  RDF.IRI.coercible() | RDF.BlankNode.t(),
  opts :: keyword()
) :: t()
```

# `query_endpoint`

Returns the SPARQL query endpoint URL for the store.

Uses the explicitly configured `query_endpoint` if set, otherwise
delegates to the adapter's `c:Gno.Store.Adapter.determine_query_endpoint/1`.

# `query_endpoint!`

# `update_endpoint`

Returns the SPARQL update endpoint URL for the store.

# `update_endpoint!`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
