<https://docs.linkeddatahub.com/tutorial/publish/>
        a       <https://w3id.org/atomgraph/linkeddatahub/document-hierarchy#Item>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>
                <https://docs.linkeddatahub.com/tutorial/publish/#content>;
        <http://purl.org/dc/terms/created>
                "2026-09-29T09:52:44.993Z"^^<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>
                "Grant public access and ship it";
        <http://purl.org/dc/terms/title>
                "Publish";
        <http://rdfs.org/sioc/ns#has_container>
                <https://docs.linkeddatahub.com/tutorial/>;
        <http://www.w3.org/ns/auth/acl#owner>
                <https://admin.linkeddatahub.com/acl/agents/5ba81960-d511-4a3b-8b9a-cb5bb278dd95/#this> .

<https://docs.linkeddatahub.com/tutorial/publish/#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\">Grant public access and ship it</p>\n    <p>So far only the owner's WebID certificate can see the app. Access is governed by <a href=\"../../reference/administration/acl/\" target=\"_blank\">ACL authorizations</a> — documents in the admin\n        app, like everything else. Publishing means creating one authorization: read access on the whole dataspace for all agents.</p>\n    <div class=\"ac-tabs or-horizontal\">\n        <div class=\"ac-tablist sz-md va-line\" role=\"tablist\">\n            <button aria-controls=\"in-the-browser-pane\" aria-selected=\"true\" class=\"ac-tab is-on\" id=\"in-the-browser-tab\" role=\"tab\" type=\"button\"><span class=\"ac-tab-lbl\">In the browser</span></button>\n            <button aria-controls=\"from-the-command-line-pane\" aria-selected=\"false\" class=\"ac-tab\" id=\"from-the-command-line-tab\" role=\"tab\" type=\"button\"><span class=\"ac-tab-lbl\">From the command line</span></button>\n        </div>\n        <div aria-labelledby=\"in-the-browser-tab\" class=\"ac-tabpanel\" id=\"in-the-browser-pane\" role=\"tabpanel\">\n        <p>Create the authorization with the access control forms in the admin dataspace — see the <a href=\"../../reference/administration/acl/\" target=\"_blank\">ACL reference</a> for\n            the authorization model: who (agents, agent classes), what (documents, document classes), and which <code>acl:mode</code>.</p>\n        </div>\n        <div aria-labelledby=\"from-the-command-line-tab\" class=\"ac-tabpanel\" hidden=\"hidden\" id=\"from-the-command-line-pane\" role=\"tabpanel\">\n        <pre>ldh admin make-public</pre>\n        <p>The command extends the admin dataspace's <samp>acl/authorizations/public/</samp> document: the built-in <samp>Public access</samp> authorization gains its access grants, and a second\n            authorization is added. Authorizations are data, so you can inspect what the command wrote — and delete it to unpublish:</p>\n        <pre>@prefix acl:  &lt;http://www.w3.org/ns/auth/acl#&gt; .\n@prefix rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; .\n@prefix def:  &lt;https://w3id.org/atomgraph/linkeddatahub/default#&gt; .\n@prefix dh:   &lt;https://w3id.org/atomgraph/linkeddatahub/document-hierarchy#&gt; .\n@prefix nfo:  &lt;http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#&gt; .\n@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; .\n\n&lt;#this&gt; a acl:Authorization ;\n    rdfs:label \"Public access\" ;\n    acl:mode acl:Read ;\n    acl:agentClass foaf:Agent,               # matches unauthenticated requests\n        acl:AuthenticatedAgent ;             # matches authenticated ones\n    acl:accessToClass def:Root, dh:Container, dh:Item, nfo:FileDataObject ;\n    acl:accessTo &lt;https://localhost:4443/sparql&gt; .\n\n&lt;#sparql-post&gt; a acl:Authorization ;         # allows queries over POST\n    acl:mode acl:Append ;\n    acl:agentClass foaf:Agent, acl:AuthenticatedAgent ;\n    acl:accessTo &lt;https://localhost:4443/sparql&gt; .</pre>\n        <p>The first authorization grants <code>acl:Read</code> on every document class — the root, containers, items and file uploads — and on the\n            SPARQL endpoint; the second additionally allows <code>POST</code>ed queries.</p>\n        </div>\n    </div>\n    <div>\n        <h2 id=\"result\">What you now see</h2>\n        <p>Open the base URL in a private browser window, with no certificate: the Northwind Traders app renders, charts and all. It is now a public Linked Data dataset <em>and</em> a public web\n            application — the same URLs serve both, negotiated by content type.</p>\n        <img alt=\"The app in a private window, unauthenticated\" src=\"/uploads/bb775f1ede1297d97ccaa12bc19a25e7e38c95ff\"></img>\n    </div>\n    <div>\n        <h2 id=\"how-this-works\">How this works</h2>\n        <ul>\n            <li><a href=\"../../reference/administration/acl/\" target=\"_blank\">Access control</a> — agents, groups, authorizations and access modes</li>\n        </ul>\n    </div>\n    <p class=\"ldh-body-lg\">Next: <a href=\"../app-as-repository/\">App as a repository</a></p>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .
