diff --git a/AGENTS.md b/AGENTS.md index 718739341..161e26c9d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -87,7 +87,7 @@ Outbound `SERVICE` and `LOAD` — from the triplestore and from the platform ali - Documents carry ordered **content blocks**, attached by RDF container membership properties — `rdf:_1`, `rdf:_2`, … on the document resource. Reordering a block rewrites those predicates. - Only `ldh:Object` (an embedded RDF resource view, `rdf:value` naming the resource) and `ldh:XHTML` (rich text, `rdf:value` an `rdf:XMLLiteral`) are permitted as block values; anything else must be wrapped in an `ldh:Object`. -- **Views** (`ldh:View`) list resources. A view's `spin:query` is a stored `SELECT` (`sp:Select`), which the client wraps into a `DESCRIBE` of the query's **first variable** and renders in the view's `ac:mode`: a list, table, grid, map, or a graph. That variable must therefore bind resources (`SELECT ?item WHERE { … }`): one that binds values — a title, a number, a computed `(YEAR(NOW()) AS ?year)` — describes nothing, and the view shows an error instead of results. To show values, use a chart. +- **Views** (`ldh:View`) list resources. A view's `spin:query` is a stored `SELECT` (`sp:Select`), which the client wraps into a `DESCRIBE` of the query's **first variable** and renders in the view's `ac:mode`: a list, table, grid, map, or a graph. That variable must therefore bind resources (`SELECT ?item WHERE { … }`): one that binds values — a title, a number, a computed `(YEAR(NOW()) AS ?year)` — describes nothing, and the view shows an error instead of results. To show values, use a chart. Pick the mode by what the resources carry: `ac:GridMode` leads each card with the resource's image (`foaf:img`, `foaf:depiction`, `foaf:logo`, `schema:image`, `schema:logo`, `schema:thumbnailUrl`), `ac:MapMode` pins the ones with `geo:lat`/`geo:long`, and `ac:GraphMode` draws how they link. A table of resources that have photos or coordinates reads as a database, not as the things. - **Charts** (`ldh:ResultSetChart`) plot a stored `SELECT`'s values: `ldh:categoryVarName` names the category variable and each `ldh:seriesVarName` a series, in `ldh:chartType`'s form. - Forms and validation are ontology-driven (SPIN constructors + SHACL shapes), so instance data is shaped by the app's ontology rather than hardcoded schemas. - **Imports** are documents too: an `ldh:CSVImport` or `ldh:RDFImport` resource with `ldh:file` (the source), `spin:query` (the transformation) and, for CSV, `ldh:delimiter`. Creating one submits the ingest; the source URIs are validated before being fetched.