Apache Jena
Install Apache Jena, configure its capabilities and verify a bounded operation.
Use @craven/jena to materialize ontology facts into an Apache Jena (Fuseki) SPARQL store.
Install
Before you start
You need a Semogram account with access to the workspace and permission to manage plugin installations. You also need access to the external system; installing a plugin does not grant credentials or provision it.
Provision a reachable Apache Jena Fuseki service and an existing dataset. Collect the base endpoint, dataset name and optional HTTP basic-auth credentials. Semogram’s plugin does not deploy Fuseki for you.
Configure the installation
- Open Plugins in your workspace and select Explore.
- Find Apache Jena, inspect its publisher, version and capabilities, and choose the matching capability.
- Give the installation a useful name and fill in its connection configuration.
- Save it and run the connection check where the capability provides one. Read the returned error before proceeding.
This is an illustrative configuration. Replace every example value; never paste real credentials into an assistant prompt or public document.
Open workspace Plugins → Explore, choose the matching capability and fill its installation settings. Enter values in the labeled controls rather than pasting the whole JSON object.
| UI field | Example value |
|---|---|
| Endpoint | https://fuseki.example.com |
| Dataset | operations |
Nested labels above identify the containing group. Lists use the form’s list controls; open-ended objects use its object editor. Labels and available options follow the installed version’s contract. Enter credentials in the protected fields and review the selected installation before saving.
In the platform assistant or your connected MCP assistant, ask:
Install the plugin described on this page in this workspace. Discover its catalog entry, select the matching capability and propose the installation using the connection settings shown here. Ask me to enter credentials in protected installation fields. Show the selected plugin/version, capability and non-secret settings before saving.Replace placeholders with real accessible resources. The assistant prepares the operation; inspect its proposed inputs and result.
Use plugin_catalog_list / plugin_catalog_get to obtain the discovery ID and matching capability class (reads, writes or factStores). Call plugin_installation_create with the arguments below through an authenticated MCP connection. The workspace comes from that connection. Enter credentials through an authorized protected configuration path; do not send real secrets as conversational prompt text.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "plugin_installation_create",
"arguments": {
"capabilityClass": "<MATCHING_CAPABILITY_CLASS>",
"discoveryId": "<DISCOVERY_ID_FROM_CATALOG>",
"name": "<INSTALLATION_NAME>",
"config": {
"endpoint": "https://fuseki.example.com",
"dataset": "operations"
},
"idempotencyKey": "<UNIQUE_KEY_FOR_THIS_INSTALLATION>"
}
}
}This operation has no standalone public /api/v1 plugin-installation/catalog route in the current implementation. Use the UI or MCP methods shown here.
Configuration fields
| Field | Type | Required | Details |
|---|---|---|---|
endpoint | string | Yes | Fuseki base URL, e.g. http://localhost:3030. |
dataset | string | Yes | Dataset name configured on Fuseki, e.g. craven. |
user | string | No | Optional HTTP basic auth user. |
password | string | No | Optional HTTP basic auth password. Secret configuration. |
View the complete published contracts for nested settings and endpoint selectors. Inspect the installed version’s contract before configuring optional fields; catalog availability and versions can vary by deployment.
Make your first read
Follow the ontology-store scenario for target setup and verification.
Open Data Endpoints, choose the installed capability and configure a concrete target. For this plugin, an illustrative target is:
Open workspace Data Endpoints → New data endpoint → Edit manually, choose the direction and installed capability described in this example, then fill the target fields. Enter values in the labeled controls rather than pasting the whole JSON object.
| UI field | Example value |
|---|---|
| Type | jena_ontology_fact_store |
| Graph uri | https://example.com/graphs/operations |
| Base iri | https://example.com/ontology/ |
Nested labels above identify the containing group. Lists use the form’s list controls; open-ended objects use its object editor. Labels and available options follow the installed version’s contract. Review the endpoint name, direction, capability and selected target before saving.
In the platform assistant or your connected MCP assistant, ask:
Create the endpoint described on this page using these settings:
name: <ENDPOINT_NAME_FROM_THIS_EXAMPLE>
namespace: <ENDPOINT_NAMESPACE_FROM_THIS_EXAMPLE>
role: ontology_store
contractKind: ontology_fact_store
target / type: jena_ontology_fact_store
target / graphUri: https://example.com/graphs/operations
target / baseIri: https://example.com/ontology/
pluginCapabilityInstallationId: <INSTALLED_CAPABILITY_UUID>
Use the actual installed capability and the endpoint name/namespace selected in this example. Show the proposed direction, connection and target before saving. Keep credentials on the installation.Replace placeholders with real accessible resources. The assistant prepares the operation; inspect its proposed inputs and result.
Use a workspace API key with endpoints:write. Set SEMOGRAM_API_KEY in your shell; replace resource placeholders with real IDs. This is an HTTP resource request, not an MCP JSON-RPC message.
curl --request POST "https://platform.semogram.com/api/v1/data-endpoints" \
--header "Authorization: Bearer ${SEMOGRAM_API_KEY}" \
--header "Idempotency-Key: <UNIQUE_KEY_FOR_THIS_ENDPOINT>" \
--header "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"name": "<ENDPOINT_NAME_FROM_THIS_EXAMPLE>",
"namespace": "<ENDPOINT_NAMESPACE_FROM_THIS_EXAMPLE>",
"role": "ontology_store",
"contractKind": "ontology_fact_store",
"target": {
"type": "jena_ontology_fact_store",
"graphUri": "https://example.com/graphs/operations",
"baseIri": "https://example.com/ontology/"
},
"pluginCapabilityInstallationId": "<INSTALLED_CAPABILITY_UUID>"
}
JSONCall source_create with the arguments below through an authenticated workspace MCP connection. Replace the name/namespace placeholders with the labels chosen in this example and use the actual installed capability UUID. Set the role/contract to the direction described here; the workspace is resolved from the connection. This configures an endpoint and does not execute a read or write.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "source_create",
"arguments": {
"name": "<ENDPOINT_NAME_FROM_THIS_EXAMPLE>",
"namespace": "<ENDPOINT_NAMESPACE_FROM_THIS_EXAMPLE>",
"role": "ontology_store",
"contractKind": "ontology_fact_store",
"target": {
"type": "jena_ontology_fact_store",
"graphUri": "https://example.com/graphs/operations",
"baseIri": "https://example.com/ontology/"
},
"pluginCapabilityInstallationId": "<INSTALLED_CAPABILITY_UUID>",
"idempotencyKey": "<UNIQUE_KEY_FOR_THIS_ENDPOINT>"
}
}
}Configure a fact-store target, then run a small ontology materialization. Read a known fact back and inspect its source evidence. If using delegated SPARQL, run a read query against the intended package-scoped graph.
Installation is not ingestion. Use the saved endpoint in a supported query or a small pipeline, validate the pipeline, execute it and inspect its run. Add a schedule only after the bounded run succeeds.
Manage the connection
Jena is an ontology fact store rather than a raw source-table connector. The target names a graph IRI and a base IRI; the installation names the Fuseki endpoint and dataset. Query and update operations use the corresponding dataset routes.
Change connection settings on the installation and target selectors on the endpoint. Recheck the connection after credential rotation. Review consuming endpoints and pipelines before replacing a capability or removing its installation.
For assistant-driven setup, use catalog discovery, installation creation and installation checks. Use real IDs returned by discovery, not the example name as an ID.
FAQ
Why does the check or first run fail?
Check endpoint/dataset spelling, authentication and query/update permissions. A reachable ping endpoint does not prove the chosen dataset accepts materialization or delegated queries.
Does installing this plugin start a sync?
No. A check verifies a supported connection probe. Queries and pipeline runs perform reads; recurring ingestion needs a schedule. Inspect run status, records and evidence to confirm actual work.
Can an assistant use every operation after installation?
Only operations supported by the capability and permitted for the caller. The MCP tool reference marks plugin and connector requirements; declaring a write capability does not grant every source-write or maintenance operation.
What should I verify before using production data?
Check a known small input, the expected result, permissions, supported read/write behavior and failure handling. These guides describe the implemented contracts; they are not a claim that your external system has already passed a live connection test.