<https://docs.linkeddatahub.com/reference/data-model/resources/#live-example>
        a       <https://w3id.org/atomgraph/linkeddatahub#XHTML>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n    <div>\n        <h2 id=\"live-example\">Live example</h2>\n        <p>The block below is not a code snippet — it is an actual query block embedded in this document, executing against the\n            <a href=\"https://northwind-traders.demo.linkeddatahub.com/\" target=\"_blank\">Northwind Traders dataspace</a>'s SPARQL endpoint. The query, the\n            service it runs against, and the block that places it here are three plain RDF resources in this very document.</p>\n    </div>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .

<https://docs.linkeddatahub.com/reference/data-model/resources/#northwind-query-block>
        a       <https://w3id.org/atomgraph/linkeddatahub#Object>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                <https://docs.linkeddatahub.com/reference/data-model/resources/#northwind-query>;
        <http://purl.org/dc/terms/title>
                "Query another dataspace" .

<https://docs.linkeddatahub.com/reference/data-model/resources/#northwind-service>
        a       <http://www.w3.org/ns/sparql-service-description#Service>;
        <http://purl.org/dc/terms/title>
                "Northwind Traders SPARQL service";
        <http://www.w3.org/ns/sparql-service-description#endpoint>
                <https://northwind-traders.demo.linkeddatahub.com/sparql>;
        <http://www.w3.org/ns/sparql-service-description#supportedLanguage>
                <http://www.w3.org/ns/sparql-service-description#SPARQL11Query> .

<https://docs.linkeddatahub.com/reference/data-model/resources/>
        a       <https://w3id.org/atomgraph/linkeddatahub/document-hierarchy#Item>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>
                <https://docs.linkeddatahub.com/reference/data-model/resources/#content>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2>
                <https://docs.linkeddatahub.com/reference/data-model/resources/#live-example>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_3>
                <https://docs.linkeddatahub.com/reference/data-model/resources/#northwind-query-block>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_4>
                <https://docs.linkeddatahub.com/reference/data-model/resources/#management>;
        <http://purl.org/dc/terms/created>
                "2026-09-29T09:52:35.932Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/creator>
                <https://admin.linkeddatahub.com/acl/agents/5ba81960-d511-4a3b-8b9a-cb5bb278dd95/#this>;
        <http://purl.org/dc/terms/description>
                "RDF resources and their management";
        <http://purl.org/dc/terms/title>
                "Resources";
        <http://rdfs.org/sioc/ns#has_container>
                <https://docs.linkeddatahub.com/reference/data-model/>;
        <http://www.w3.org/ns/auth/acl#owner>
                <https://admin.linkeddatahub.com/acl/agents/5ba81960-d511-4a3b-8b9a-cb5bb278dd95/#this> .

<https://docs.linkeddatahub.com/reference/data-model/resources/#management>
        a       <https://w3id.org/atomgraph/linkeddatahub#XHTML>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n    <div>\n        <h2 id=\"management\">Management</h2>\n        <div class=\"ac-tabs or-horizontal\">\n            <div class=\"ac-tablist sz-md va-line\" role=\"tablist\">\n                <button aria-controls=\"user-interface-pane\" aria-selected=\"true\" class=\"ac-tab is-on\" id=\"user-interface-tab\" role=\"tab\" type=\"button\"><span class=\"ac-tab-lbl\">User interface</span></button>\n                <button aria-controls=\"command-line-interface-pane\" aria-selected=\"false\" class=\"ac-tab\" id=\"command-line-interface-tab\" role=\"tab\" type=\"button\"><span class=\"ac-tab-lbl\">Command line interface</span></button>\n            </div>\n            <div aria-labelledby=\"user-interface-tab\" class=\"ac-tabpanel\" id=\"user-interface-pane\" role=\"tabpanel\">\n            <p>Resources can only be managed when the <a href=\"../../user-interface/#layout-modes\" target=\"_blank\">Properties layout mode</a> is active.</p>\n            <table>\n                <caption class=\"ac-vh\">Resource management actions</caption>\n                <thead>\n                    <tr>\n                        <th scope=\"col\">Action</th>\n                        <th scope=\"col\">Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <th scope=\"row\">Create</th>\n                        <td>Click the <span class=\"ac-btn in-primary ap-solid sz-md\">Create <span aria-hidden=\"true\" class=\"msi caret\">expand_more</span></span> dropdown at the bottom of the page. Fill out the fields in the form that appears. Click <span class=\"ac-btn in-primary ap-solid sz-sm\">Save</span>.</td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\">Update</th>\n                        <td>Click the <span class=\"ac-iconbtn sz-sm in-neutral ap-ghost\"><span aria-hidden=\"true\" class=\"msi sm\">edit</span></span> button in the top-right corner of the resource block (it appears when you move the mouse close to that corner). Make changes in the form that appears. Click <span class=\"ac-btn in-primary ap-solid sz-sm\">Save</span>.</td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\">Delete</th>\n                        <td>Click the <span class=\"ac-iconbtn sz-sm in-neutral ap-ghost\"><span aria-hidden=\"true\" class=\"msi sm\">edit</span></span> button in the top-right corner of the resource block. Click the <span class=\"ac-iconbtn sz-sm in-destructive ap-ghost\"><span aria-hidden=\"true\" class=\"msi sm\">close</span></span> button to delete the resource.</td>\n                    </tr>\n                </tbody>\n            </table>\n            </div>\n            <div aria-labelledby=\"command-line-interface-tab\" class=\"ac-tabpanel\" hidden=\"hidden\" id=\"command-line-interface-pane\" role=\"tabpanel\">\n            <p>The following resource types can be created using the <a href=\"../../command-line-interface/\" target=\"_blank\">command line interface</a>. Any resource can be updated or deleted with <a href=\"../../command-line-interface/#commands\"><samp>ldh patch</samp></a>, which applies a SPARQL update to the resource's document.</p>\n            <table>\n                <caption class=\"ac-vh\">Resource types and their CLI commands</caption>\n                <thead>\n                    <tr>\n                        <th scope=\"col\">Type</th>\n                        <th scope=\"col\">CLI command</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <th scope=\"row\"><samp>CONSTRUCT</samp></th>\n                        <td><a href=\"../../command-line-interface/#commands\"><samp>ldh add construct</samp></a></td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\"><samp>CSV import</samp></th>\n                        <td><a href=\"../../command-line-interface/#commands\"><samp>ldh add csv-import</samp></a></td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\"><samp>File</samp></th>\n                        <td><a href=\"../../command-line-interface/#commands\"><samp>ldh add file</samp></a></td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\"><samp>RDF import</samp></th>\n                        <td><a href=\"../../command-line-interface/#commands\"><samp>ldh add rdf-import</samp></a></td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\"><samp>Result set chart</samp></th>\n                        <td><a href=\"../../command-line-interface/#commands\"><samp>ldh add result-set-chart</samp></a></td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\"><samp>Select</samp></th>\n                        <td><a href=\"../../command-line-interface/#commands\"><samp>ldh add select</samp></a></td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\"><samp>Service</samp></th>\n                        <td><a href=\"../../command-line-interface/#commands\"><samp>ldh add generic-service</samp></a></td>\n                    </tr>\n                    <tr>\n                        <th scope=\"row\"><samp>View</samp></th>\n                        <td><a href=\"../../command-line-interface/#commands\"><samp>ldh add view</samp></a></td>\n                    </tr>\n                </tbody>\n            </table>\n            </div>\n        </div>\n    </div>\n    <p class=\"ldh-body-lg\">To query data and create resources step-by-step, follow the <a href=\"../../../user-guide/query-data/\">Query data</a> and <a href=\"../../../user-guide/create-data/create-resources/\">Create resources</a> guides</p>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .

<https://docs.linkeddatahub.com/reference/data-model/resources/#content>
        a       <https://w3id.org/atomgraph/linkeddatahub#XHTML>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#value>
                "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n    <p class=\"ldh-body-lg\">RDF resources and their management</p>\n    <div>\n        <p>Within <a href=\"../documents/\">documents</a>, users can create RDF resources, i.e. instances of both built-in and user-defined RDF classes.</p>\n        <p>Built-in classes are defined in <a href=\"../../administration/ontologies/#ontologies\">system ontologies</a> while user-defined classes are defined in user ontologies.</p>\n        <div>\n            <h2 id=\"user-defined-classes\">User-defined classes</h2>\n            <p>User-defined classes live in the dataspace's namespace ontology, which is managed in the <a href=\"../../dataspace/#admin\">admin dataspace</a>. A class becomes creatable in the UI once it has a <a href=\"../../administration/ontologies/#constructors\">constructor</a>: it then appears in the <span class=\"ac-btn in-primary ap-solid sz-md\">Create</span> dropdown alongside the built-in classes, and its instances are created and edited using the same forms. See <a href=\"../../../user-guide/change-model/\">Change the model</a> for a walkthrough of defining classes, constructors and constraints.</p>\n        </div>\n        <div>\n            <h2 id=\"built-in-classes\">Built-in classes</h2>\n            <p>LinkedDataHub's built-in <a href=\"../../administration/ontologies/#classes\">classes</a> have pre-defined <a href=\"../../administration/ontologies/#constructors\">constructors</a>, <a href=\"../../administration/ontologies/#constraints\">constraints</a> and often a customized UI rendering (implemented by <a href=\"../../stylesheets/#overriding-templates\">overriding generic XSLT templates</a> with type-specific templates) as well, for example a query editor or a chart.</p>\n            <p>The table lists the built-in classes creatable from the <span class=\"ac-btn in-primary ap-solid sz-md\">Create</span> dropdown; the two content block classes, <code>ldh:XHTML</code> and <code>ldh:Object</code>, are documented on the <a href=\"../blocks/\">Content blocks</a> page.</p>\n            <table>\n                <caption class=\"ac-vh\">Built-in classes by type</caption>\n                <thead>\n                    <tr>\n                        <th scope=\"col\">Type</th>\n                        <th scope=\"col\">Class</th>\n                        <th scope=\"col\">Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td><samp>ASK</samp></td>\n                        <td><code>sp:Ask</code></td>\n                        <td><a href=\"#queries\">SPARQL <code>ASK</code> query</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>Dataspace</samp></td>\n                        <td><code>lds:Dataspace</code></td>\n                        <td><a href=\"../../dataspace/#dataspaces\">Remote LinkedDataHub dataspace</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>CONSTRUCT</samp></td>\n                        <td><code>sp:Construct</code></td>\n                        <td><a href=\"#queries\">SPARQL <code>CONSTRUCT</code> query</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>CSV import</samp></td>\n                        <td><code>ldh:CSVImport</code></td>\n                        <td>Asynchronous <a href=\"../../imports/csv/\">CSV data import</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>DESCRIBE</samp></td>\n                        <td><code>sp:Describe</code></td>\n                        <td><a href=\"#queries\">SPARQL <code>DESCRIBE</code> query</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>File</samp></td>\n                        <td><code>nfo:FileDataObject</code></td>\n                        <td>An uploaded file, stored <a href=\"../../dataset/#hierarchical-uris\">content-addressed</a> under <samp>uploads/</samp></td>\n                    </tr>\n                    <tr>\n                        <td><samp>Graph chart</samp></td>\n                        <td><code>ldh:GraphChart</code></td>\n                        <td><a href=\"#charts\">Chart based on <code>CONSTRUCT</code>/<code>DESCRIBE</code> query results</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>RDF import</samp></td>\n                        <td><code>ldh:RDFImport</code></td>\n                        <td>Asynchronous <a href=\"../../imports/rdf/\">RDF data import</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>Result set chart</samp></td>\n                        <td><code>ldh:ResultSetChart</code></td>\n                        <td><a href=\"#charts\">Chart based on <code>SELECT</code> query results</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>Select</samp></td>\n                        <td><code>sp:Select</code></td>\n                        <td><a href=\"#queries\">SPARQL <code>SELECT</code> query</a></td>\n                    </tr>\n                    <tr>\n                        <td><samp>Service</samp></td>\n                        <td><code>sd:Service</code></td>\n                        <td>SPARQL service (identified by its endpoint URL)</td>\n                    </tr>\n                    <tr>\n                        <td><samp>View</samp></td>\n                        <td><code>ldh:View</code></td>\n                        <td><a href=\"#views\">View based on <code>SELECT</code> query results</a></td>\n                    </tr>\n                </tbody>\n            </table>\n            <p>Resources that have customized UIs (such as queries, views, charts) are documented in more detail below.</p>\n        </div>\n    </div>\n    <div>\n        <h2 id=\"queries\">Queries</h2>\n        <img alt=\"A query block with the SPARQL editor\" src=\"/uploads/0931818c26218525110876d68c83caf3758754b9\"></img>\n        <p>Queries are SPARQL 1.1 query strings that can be executed interactively. A query may name the SPARQL\n        service it executes against; otherwise it runs against the dataspace's own service.</p>\n        <p>A query is a resource typed by its SPARQL form, carrying the query string as <code>sp:text</code>:</p>\n        <pre>&lt;#select-categories-query&gt; a sp:Select ;\n    dct:title \"Select categories\" ;\n    sp:text '''PREFIX  schema: &lt;https://schema.org/&gt;\n\nSELECT DISTINCT  ?category\nWHERE\n  { GRAPH ?doc\n      { ?category  a           schema:ProductGroup ;\n                  schema:name  ?categoryName\n      }\n  }\nORDER BY ?categoryName''' .</pre>\n        <p class=\"exhibit-links\">Source: <a href=\"https://github.com/AtomGraph/LinkedDataHub-Apps/blob/master/demo/northwind-traders/categories.ttl\" target=\"_blank\">categories.ttl</a> · Live: <a href=\"https://northwind-traders.demo.linkeddatahub.com/categories/\" target=\"_blank\">/categories/</a></p>\n        <p>It is only possible to save valid SPARQL 1.1 query strings. SPARQL updates are currently not supported.</p>\n    </div>\n    <div>\n        <h2 id=\"charts\">Charts</h2>\n        <img alt=\"A chart block rendering SPARQL results\" src=\"/uploads/5ef380cf4b9b4f0f451b6abe96516e4fd50fd530\"></img>\n        <p>Charts can render both types of SPARQL results:</p>\n        <ul>\n            <li>tabular <code>SELECT</code> results (<code>ldh:ResultSetChart</code>)</li>\n            <li>graph results of <code>DESCRIBE</code> and <code>CONSTRUCT</code> (<code>ldh:GraphChart</code>)</li>\n        </ul>\n        <p>A chart resource is easily confused with the chart layout mode in <a href=\"#views\">views</a>. The layout mode renders\n        view results as a chart on the fly, while a chart resource additionally stores the chart type as well as the category and\n        series information: variable names in the case of tabular results, and property URIs in the case of graph results.</p>\n        <div>\n            <h3 id=\"chart-vocabulary\">RDF vocabulary</h3>\n            <p>A chart references its query with <code>spin:query</code> and describes its rendering with the following properties:</p>\n            <table>\n                <caption class=\"ac-vh\">Vocabulary properties and what they apply to</caption>\n                <thead>\n                    <tr>\n                        <th scope=\"col\">Property</th>\n                        <th scope=\"col\">Applies to</th>\n                        <th scope=\"col\">Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td><code>ldh:chartType</code></td>\n                        <td>both</td>\n                        <td>One of <code>ac:Table</code>, <code>ac:LineChart</code>, <code>ac:BarChart</code>, <code>ac:ScatterChart</code>, <code>ac:Timeline</code></td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:categoryVarName</code></td>\n                        <td><code>ldh:ResultSetChart</code></td>\n                        <td>Name of the <code>SELECT</code> variable that provides the category values</td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:seriesVarName</code></td>\n                        <td><code>ldh:ResultSetChart</code></td>\n                        <td>Name(s) of the <code>SELECT</code> variable(s) that provide the series values</td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:categoryProperty</code></td>\n                        <td><code>ldh:GraphChart</code></td>\n                        <td>URI of the property that provides the category values</td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:seriesProperty</code></td>\n                        <td><code>ldh:GraphChart</code></td>\n                        <td>URI(s) of the property(ies) that provide the series values</td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <p>The default chart type is the table. Other chart types might not apply to all result data; for example, a\n        scatter chart needs numeric or datetime values for both category and series.</p>\n        <p>A complete chart is a chain of three resources — the query, the chart description, and an\n            <a href=\"../blocks/#object-blocks\">object block</a> that places it on a document:</p>\n        <pre>&lt;#category-revenue-query&gt; a sp:Select ;\n    dct:title \"Category revenue\" ;\n    sp:text '''PREFIX schema: &lt;https://schema.org/&gt;\n\nSELECT ?categoryName (SUM(?sale) AS ?revenue)\nWHERE {\n    GRAPH ?orderGraph {\n        ?order schema:orderedItem ?orderItem .\n        ?orderItem schema:orderedItem ?product ;\n                   schema:price ?sale .\n    }\n    GRAPH ?productGraph {\n        ?product schema:category ?category .\n    }\n    GRAPH ?categoryGraph {\n        ?category schema:name ?categoryName .\n    }\n}\nGROUP BY ?category ?categoryName\nORDER BY DESC(?revenue)''' .\n\n&lt;#category-revenue&gt; a ldh:ResultSetChart ;\n    dct:title \"Revenue by category\" ;\n    spin:query &lt;#category-revenue-query&gt; ;\n    ldh:chartType &lt;https://w3id.org/atomgraph/client#BarChart&gt; ;\n    ldh:categoryVarName \"categoryName\" ;\n    ldh:seriesVarName \"revenue\" .\n\n&lt;#category-revenue-block&gt; a ldh:Object ;\n    dct:title \"Revenue by category\" ;\n    rdf:value &lt;#category-revenue&gt; .</pre>\n        <p class=\"exhibit-links\">Source: <a href=\"https://github.com/AtomGraph/LinkedDataHub-Apps/blob/master/demo/northwind-traders/categories.ttl\" target=\"_blank\">categories.ttl</a> · Live: <a href=\"https://northwind-traders.demo.linkeddatahub.com/categories/\" target=\"_blank\">/categories/</a></p>\n        <p>Multiple <code>ldh:seriesVarName</code> values plot one series per named result variable — see the\n            <a href=\"https://github.com/AtomGraph/LinkedDataHub-Apps/blob/master/demo/northwind-traders/orders.ttl\" target=\"_blank\">demo's revenue-by-carrier chart</a>,\n            which pivots three carriers into three series with conditional aggregation.</p>\n    </div>\n    <div>\n        <h2 id=\"views\">Views</h2>\n        <img alt=\"A view block with paginated results\" src=\"/uploads/83d04d55088908b1932e777348ef5cd01f160148\"></img>\n        <p>A view renders the results of a SPARQL <code>SELECT</code> query as an interactive, paginated and optionally ordered list.\n        The UI renders the descriptions of the resources selected by the result set, rather than the tabular result itself.\n        That is achieved by on-the-fly SPARQL query rewriting: the <code>SELECT</code> is wrapped into\n        a <code>DESCRIBE</code> query; <code>DESCRIBE</code> reuses the same variables from the <code>SELECT</code> projection.\n        <em>This will not work for all <code>SELECT</code> queries.</em></p>\n        <p>To render paginated lists of resources, traditional applications would normally have a dedicated API endpoint that\n        supports pagination, ordering etc. In LinkedDataHub, views achieve the same functionality by simply building the\n        SPARQL query string on the client-side. A view is therefore a client-side counterpart of a container: it produces a\n        listing without a server-side endpoint.</p>\n        <p>A view references its <a href=\"#queries\">query</a> and optionally fixes a layout mode:</p>\n        <pre>&lt;#select-categories-view&gt; a ldh:View ;\n    spin:query &lt;#select-categories-query&gt; ;\n    ac:mode &lt;https://w3id.org/atomgraph/client#GridMode&gt; .</pre>\n        <p class=\"exhibit-links\">Source: <a href=\"https://github.com/AtomGraph/LinkedDataHub-Apps/blob/master/demo/northwind-traders/categories.ttl\" target=\"_blank\">categories.ttl</a> · Live: <a href=\"https://northwind-traders.demo.linkeddatahub.com/categories/\" target=\"_blank\">/categories/</a></p>\n        <p>Views can be rendered in multiple layout modes: properties, list, grid, table, map, chart, and graph. They also show\n        the total number of results and allow result ordering by property. In the table mode, columns can be sorted by clicking\n        their headers; the sort order follows each column's datatype.</p>\n        <div>\n            <h3 id=\"projecting-variables\">Projecting variables</h3>\n            <p>Because the <code>SELECT</code> is rewritten into a <code>DESCRIBE</code> over its projected variables, a view can only render terms that the triplestore is able to describe:</p>\n            <ul>\n                <li>Project <em>resources</em> (IRIs) that exist in the dataset — their labels, images and links are resolved from each resource's own description. Projecting <em>literals</em> (a <code>?label</code>, a <code>?date</code>, or any computed value) describes nothing, so the view renders empty.</li>\n                <li>Project IRIs that are stored <em>locally</em>. An IRI that only occurs as an object but is not itself described in the dataset — for example an external image URL — contributes no triples.</li>\n                <li>Project a <em>single</em> entity type. Projecting several resource variables of different types blends their descriptions into one result set, which rarely renders coherently; select the one type you want to list and reach the related resources through their properties instead.</li>\n            </ul>\n            <p>The query that drives the categories grid above projects the category resource, so the view renders the category documents:</p>\n            <pre>SELECT DISTINCT ?category\nWHERE {\n    GRAPH ?doc {\n        ?category\n            a schema:ProductGroup ;\n            schema:name ?categoryName\n    }\n}</pre>\n            <p>This query <em>looks</em> equivalent, but it projects the name literal instead of the category resource — so it describes nothing and renders an empty view:</p>\n            <pre>SELECT DISTINCT ?categoryName\nWHERE {\n    GRAPH ?doc {\n        ?category\n            a schema:ProductGroup ;\n            schema:name ?categoryName\n    }\n}</pre>\n        </div>\n        <div>\n            <h3 id=\"view-layout-modes\">Layout modes</h3>\n            <p>View results are rendered in the view's own set of layout modes — properties, list, grid, table, map, chart, and graph — a larger set than the <a href=\"../../user-interface/#layout-modes\">document layout modes</a>.</p>\n        </div>\n        <div>\n            <h3 id=\"inline-creation\">Inline creation</h3>\n            <p>A view attached to a property in the <a href=\"../../administration/packages/#property-views\">dataspace's ontology</a> renders a <span class=\"ac-btn in-primary ap-solid sz-md\">Create</span> button in its header, so a view can double as an entry point for the data it lists. The class to construct is inferred from the attaching property: its <code>rdfs:range</code> for a forward <code>ldh:view</code>, its <code>rdfs:domain</code> for an inverse <code>ldh:inverseView</code>. A property whose range is not a named class — an <code>owl:unionOf</code> list, say — gets no button, because there is nothing to construct.</p>\n            <p>Where the new instance is stored is not declared anywhere. LinkedDataHub works it out from the view's own results: a second query, derived from the view's <code>SELECT</code> pattern with <code>LIMIT</code>, <code>OFFSET</code> and <code>ORDER BY</code> removed, asks which containers hold the documents that describe the existing solutions. A view is a projection and its rows are its solutions, so creating a row means making a new solution appear in that projection — and the existing solutions already say where their descriptions live.</p>\n            <ul>\n                <li><em>Exactly one container</em> — the button renders and targets it.</li>\n                <li><em>No container</em>, because the result set is empty — no button. There is nothing to generalise from, so the first instance of a kind is created through its container the usual way.</li>\n                <li><em>More than one container</em>, because the results span several — no button. Nothing in the data says where a new row belongs, and deciding by majority would be placement nobody stated.</li>\n            </ul>\n            <p>The question is put to the whole result set rather than to the page on screen, so the destination cannot depend on which page the reader happens to be looking at. The determined container is then checked for <code>acl:Write</code> access, which is why the button appears a moment after the rest of the view header; a forward view also writes the linking triple into the current document, so it needs write access there as well.</p>\n            <p>A view with <code>ldh:showWhenEmpty</code> set to <code>false</code> is hidden while its query returns no results — the\n                <a href=\"https://github.com/AtomGraph/LinkedDataHub-Apps/blob/master/demo/northwind-traders/admin/model/ns.ttl\" target=\"_blank\">demo's property-attached views</a>\n                use it so \"Orders from this customer\" only appears on customers that have orders.</p>\n            <pre>&lt;#select-products-view&gt; a ldh:View ;\n    spin:query &lt;#select-products-query&gt; ;\n    ac:mode &lt;https://w3id.org/atomgraph/client#TableMode&gt; ;\n    ldh:showWhenEmpty false .</pre>\n        </div>\n        <div>\n            <h3 id=\"faceted-search\">Faceted search</h3>\n            <p>Views provide faceted search in the toolbar at the top of the view, filtering the result set. The toolbar renders one dropdown pill per facetable property; opening a pill loads that property's values together with their result counts, and checking a value filters the results. Applying or removing a filter restarts paging from the first page.</p>\n            <p>By default the facets are generic and inferred from the triple patterns of the SPARQL <code>SELECT</code> query used by the view. They can be <a href=\"../../stylesheets/#overriding-templates\">customized using XSLT</a>.</p>\n        </div>\n        <div>\n            <h3 id=\"parallax\">Parallax navigation</h3>\n            <img alt=\"Parallax navigation jumping from a result set to a related one\" src=\"/uploads/f1082691b9775720f8fc01142edc7e24fa7b778d\"></img>\n            <p>Parallax is an unusual navigation approach that suits graph data particularly well. It allows jumping from a result set to a related result set by following an RDF property. The available pivots render as a row of chips directly under the view toolbar, one chip per property linking the result set to the rest of the graph; the row stays hidden while there are no pivots. Parallax navigates in both directions: a chip with a forward arrow follows a property of the results onto its objects, a chip with a backward arrow follows a property pointing at the results onto its subjects. The pivots are discovered by querying the whole result set, so they cover results beyond the current page.</p>\n            <p>Clicking a chip pivots the view onto the related result set and restarts paging from the first page. The applied steps appear in the toolbar next to the facets as removable chips reading <samp>via</samp> (forward) or <samp>linked by</samp> (backward); removing one rewinds the view to that step. Parallax works in\n                combination with faceted search which can be used to filter the initial result set.</p>\n            <p>For example, facets can be used to filter a set of products that belong to a certain category, and then parallax can be used to jump to a set of companies that provide those products, and then further on to\n                a set of representatives of those companies.</p>\n        </div>\n    </div>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .

<https://docs.linkeddatahub.com/reference/data-model/resources/#northwind-query>
        a                             <http://spinrdf.org/sp#Select>;
        <http://purl.org/dc/terms/title>
                "Sample of the Northwind Traders dataset";
        <http://spinrdf.org/sp#text>  "SELECT *\nWHERE {\n    GRAPH ?g {\n        ?s ?p ?o\n    }\n}\nLIMIT 10";
        <https://w3id.org/atomgraph/linkeddatahub#service>
                <https://docs.linkeddatahub.com/reference/data-model/resources/#northwind-service> .
