From 03cfee323c6844da9f25bfb6fed47ffc78ec1b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martynas=20Jusevi=C4=8Dius?= Date: Mon, 15 Jun 2026 21:20:31 +0200 Subject: [PATCH 1/3] Prefix Generate* LDH ops with ldh- for naming consistency `GeneratePortal`, `GenerateClassContainers`, and `GenerateOntologyViews` were the only ops under `linkeddatahub/` not registered with the `ldh-` prefix used by their siblings. Add `name()` overrides, update the example and README to match, and document a few previously unlisted ops while at it. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 16 ++++++++++++++++ examples/generate-portal.json | 2 +- .../content/generate_class_containers.py | 4 ++++ .../content/generate_ontology_views.py | 4 ++++ .../linkeddatahub/content/generate_portal.py | 4 ++++ 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 21012eb..7861231 100644 --- a/README.md +++ b/README.md @@ -49,21 +49,34 @@ The operations cover read-write Linked Data, SPARQL queries, URI manipulation, a - `DESCRIBE` - `SELECT` - `Substitute` + - `SPARQLString` +- Schema + - `ExtractClasses` + - `ExtractDatatypeProperties` + - `ExtractObjectProperties` + - `ExtractOntology` - URI & String Operations - `ResolveURI` - `EncodeForURI` - `Concat` - `Replace` - `Str` + - `STRUUID` - `URI` - Control Flow & Variables - `Value` - `Variable` - `ForEach` + - `Filter` + - `Bindings` + - `Current` + - `Execute` + - `Merge` - LinkedDataHub-specific - `ldh-CreateContainer` - `ldh-CreateItem` - `ldh-List` + - `ldh-AddFile` - `ldh-AddGenericService` - `ldh-AddResultSetChart` - `ldh-AddSelect` @@ -71,6 +84,9 @@ The operations cover read-write Linked Data, SPARQL queries, URI manipulation, a - `ldh-AddObjectBlock` - `ldh-AddXHTMLBlock` - `ldh-RemoveBlock` + - `ldh-GeneratePortal` + - `ldh-GenerateClassContainers` + - `ldh-GenerateOntologyViews` ## Usage diff --git a/examples/generate-portal.json b/examples/generate-portal.json index 9c06346..2cfe628 100644 --- a/examples/generate-portal.json +++ b/examples/generate-portal.json @@ -1,5 +1,5 @@ { - "@op": "GeneratePortal", + "@op": "ldh-GeneratePortal", "args": { "endpoint": { "@op": "URI", diff --git a/src/web_algebra/operations/linkeddatahub/content/generate_class_containers.py b/src/web_algebra/operations/linkeddatahub/content/generate_class_containers.py index 23defde..948f7d2 100644 --- a/src/web_algebra/operations/linkeddatahub/content/generate_class_containers.py +++ b/src/web_algebra/operations/linkeddatahub/content/generate_class_containers.py @@ -20,6 +20,10 @@ class GenerateClassContainers(Operation): This operation orchestrates actual HTTP operations to set up the portal structure. """ + @classmethod + def name(cls): + return "ldh-GenerateClassContainers" + @classmethod def description(cls) -> str: return "Creates LinkedDataHub containers with instance list views for ontology classes" diff --git a/src/web_algebra/operations/linkeddatahub/content/generate_ontology_views.py b/src/web_algebra/operations/linkeddatahub/content/generate_ontology_views.py index 29a78e4..b3e2d27 100644 --- a/src/web_algebra/operations/linkeddatahub/content/generate_ontology_views.py +++ b/src/web_algebra/operations/linkeddatahub/content/generate_ontology_views.py @@ -15,6 +15,10 @@ class GenerateOntologyViews(Operation): owl:maxQualifiedCardinality restriction of 1. """ + @classmethod + def name(cls): + return "ldh-GenerateOntologyViews" + @classmethod def description(cls) -> str: return "Generates LinkedDataHub view templates and SPIN queries for non-functional properties" diff --git a/src/web_algebra/operations/linkeddatahub/content/generate_portal.py b/src/web_algebra/operations/linkeddatahub/content/generate_portal.py index 09a746a..36e2852 100644 --- a/src/web_algebra/operations/linkeddatahub/content/generate_portal.py +++ b/src/web_algebra/operations/linkeddatahub/content/generate_portal.py @@ -20,6 +20,10 @@ class GeneratePortal(Operation): 4. GenerateClassContainers - creates containers for each class with instance views """ + @classmethod + def name(cls): + return "ldh-GeneratePortal" + @classmethod def description(cls) -> str: return "Generates a complete LinkedDataHub portal with class containers and property views from a SPARQL endpoint" From ee776701d60b09dff94d66956de8c7801fc0cf20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martynas=20Jusevi=C4=8Dius?= Date: Mon, 15 Jun 2026 21:20:38 +0200 Subject: [PATCH 2/3] Bump version to 1.3.1 Co-Authored-By: Claude Opus 4.7 (1M context) --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7ea64ac..b9136e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "web-algebra" -version = "1.3.0" +version = "1.3.1" description = "Composable RDF operations in JSON" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index 49bc26e..8caf5ce 100644 --- a/uv.lock +++ b/uv.lock @@ -888,7 +888,7 @@ wheels = [ [[package]] name = "web-algebra" -version = "1.2.0" +version = "1.3.1" source = { editable = "." } dependencies = [ { name = "mcp", extra = ["cli"] }, From 13f11f2677234e14d68f0a3308bb5720fc2d082f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martynas=20Jusevi=C4=8Dius?= Date: Mon, 15 Jun 2026 21:24:27 +0200 Subject: [PATCH 3/3] Bump version to 1.4.0 Naming change to ldh-Generate* is breaking for any external workflow JSON referencing the bare names, so a minor bump is more appropriate than 1.3.1. Co-Authored-By: Claude Opus 4.7 (1M context) --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b9136e7..91b0b2e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "web-algebra" -version = "1.3.1" +version = "1.4.0" description = "Composable RDF operations in JSON" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index 8caf5ce..72cdf49 100644 --- a/uv.lock +++ b/uv.lock @@ -888,7 +888,7 @@ wheels = [ [[package]] name = "web-algebra" -version = "1.3.1" +version = "1.4.0" source = { editable = "." } dependencies = [ { name = "mcp", extra = ["cli"] },