From 8a972d08a165db3214f4440fa8467382512793ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martynas=20Jusevi=C4=8Dius?= Date: Wed, 19 Aug 2026 09:36:16 +0200 Subject: [PATCH 1/2] Document inline creation in views Covers ldh:container-driven Create buttons on property views: class inference from rdfs:range/rdfs:domain, fragment-instance creation in the container, forward/inverse linking triple placement, ACL gating and ldh:showWhenEmpty. Co-Authored-By: Claude Fable 5 --- docs/reference/data-model/resources/views.ttl | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/reference/data-model/resources/views.ttl b/docs/reference/data-model/resources/views.ttl index c0e554b..6236c91 100644 --- a/docs/reference/data-model/resources/views.ttl +++ b/docs/reference/data-model/resources/views.ttl @@ -52,4 +52,22 @@ Related results

+
+

Inline creation

+

Views attached to properties using ldh:view (forward relationships) or ldh:inverseView (inverse relationships) can offer inline creation of related resources. + If the view has a ldh:container value, a Create button is shown next to the view controls.

+

The button opens a modal form for a new instance whose class is inferred from the ontology: the rdfs:range of the property for forward relationships, the rdfs:domain + for inverse ones (including the rdfs:subPropertyOf hierarchy). Submitting the form creates a new child document in the ldh:container container, with the instance stored + as a fragment resource within it. The relationship with the current resource is established automatically: forward views insert the linking triple into the current document, inverse views store + it in the new document itself. The view results are refreshed afterwards.

+

The button is only shown when the agent is authorized to write to the container (and, for forward relationships, to the current document). The ldh:container value can be asserted + in the application's own ontology, including on views defined by packages.

+

Views with empty results are shown by default; setting ldh:showWhenEmpty to false hides a view while its query returns no results.

+
skos:narrower ldh:view ns:NarrowerConcepts .
+
+ns:NarrowerConcepts a ldh:View ;
+    dct:title "Narrower concepts" ;
+    spin:query ns:SelectNarrowerConcepts ;
+    ldh:container <concepts/> .
+
"""^^rdf:XMLLiteral . \ No newline at end of file From 21c3806bce106465b79f73340a1e5416075255d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martynas=20Jusevi=C4=8Dius?= Date: Wed, 19 Aug 2026 09:36:16 +0200 Subject: [PATCH 2/2] SKOS package views tolerate untagged prefLabels LinkedDataHub forms submit plain xsd:string literals, which the langMatches(lang(?prefLabel), "en") filters excluded from every view. Co-Authored-By: Claude Fable 5 --- packages/skos/ns.ttl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/skos/ns.ttl b/packages/skos/ns.ttl index c3256cb..5cf3aa0 100644 --- a/packages/skos/ns.ttl +++ b/packages/skos/ns.ttl @@ -63,7 +63,7 @@ WHERE GRAPH ?narrowerGraph { ?narrower skos:prefLabel ?prefLabel . - FILTER (langMatches(lang(?prefLabel), "en")) + FILTER (langMatches(lang(?prefLabel), "en") || lang(?prefLabel) = "") } } } @@ -93,7 +93,7 @@ WHERE GRAPH ?broaderGraph { ?broader skos:prefLabel ?prefLabel . - FILTER (langMatches(lang(?prefLabel), "en")) + FILTER (langMatches(lang(?prefLabel), "en") || lang(?prefLabel) = "") } } } @@ -141,7 +141,7 @@ WHERE GRAPH ?memberGraph { ?member skos:prefLabel ?prefLabel . - FILTER (langMatches(lang(?prefLabel), "en")) + FILTER (langMatches(lang(?prefLabel), "en") || lang(?prefLabel) = "") } } } @@ -187,7 +187,7 @@ WHERE { GRAPH ?graph { ?concept skos:inScheme $about ; skos:prefLabel ?prefLabel . - FILTER (langMatches(lang(?prefLabel), "en")) + FILTER (langMatches(lang(?prefLabel), "en") || lang(?prefLabel) = "") } } ORDER BY ?prefLabel