<https://docs.linkeddatahub.com/extending/create-packages/#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\">Bundle the ontology and the stylesheet for your own vocabulary as a reusable package</p>\n    <p>A <a href=\"../../reference/administration/packages/\">package</a> is a namespace ontology and an XSLT stylesheet, published as Linked Data behind a package URI.\n        Developers can create custom packages for their own domain vocabularies. The process has four steps.</p>\n    <div>\n        <h2 id=\"write-ontology\">Write package ontology</h2>\n        <p>Create <samp>ns.ttl</samp> describing both the document the registry serves it as and the ontology inside it, with the vocabulary import and the views:</p>\n        <pre>&lt;&gt; a dh:Item ;\n    dct:title \"Schema.org ontology\" ;\n    foaf:primaryTopic &lt;#&gt; .\n\n&lt;#&gt; a owl:Ontology ;\n    owl:imports &lt;https://schema.org/&gt; .\n\n# Attach view to a property\nschema:knows ldh:view :PersonKnows .\n\n:PersonKnows a ldh:View ;\n    dct:title \"Knows\" ;\n    spin:query :SelectPersonKnows .\n\n:SelectPersonKnows a sp:Select ;\n    sp:text \"\"\"\n    SELECT DISTINCT ?person\n    WHERE { GRAPH ?graph { $about schema:knows ?person } }\n    ORDER BY ?person\n    \"\"\" .</pre>\n        <div class=\"ac-alert va-warning\" role=\"status\">\n            <span class=\"ac-alert-ic\"><span aria-hidden=\"true\" class=\"msi outline\">warning</span></span>\n            <div class=\"ac-alert-body\">\n                <p class=\"ac-alert-text\">The <code>dct:title</code> on <code>&lt;&gt;</code> is not optional. A write is held to the constraints of the document as it will be written, and a LinkedDataHub document must be titled, so an <samp>ns.ttl</samp> that describes only the ontology is refused <samp>422 Unprocessable Entity</samp> when it is pushed.</p>\n            </div>\n        </div>\n    </div>\n    <div>\n        <h2 id=\"write-stylesheet\">Write XSLT stylesheet</h2>\n        <p>Create the stylesheet — name the file for the vocabulary it covers — with XSLT templates using system modes like <code>ac:*</code>, <code>ldh:*</code> and <code>xhtml:*</code>. See the <a href=\"../../reference/stylesheets/\">Stylesheets reference</a> for template customization patterns.</p>\n        <pre>&lt;xsl:template match=\"schema:knows\" mode=\"ac:PropertyEditor\"/&gt;</pre>\n    </div>\n    <div>\n        <h2 id=\"publish-metadata\">Publish package metadata</h2>\n        <p>Publish the descriptor as Linked Data at your package URI, naming the ontology beside it:</p>\n        <pre>&lt;&gt; a dh:Container ;\n    dct:title \"Schema.org\" ;\n    foaf:primaryTopic &lt;#this&gt; .\n\n&lt;#this&gt; a lds:Package ;\n    dct:title \"Schema.org Package\" ;\n    dct:description \"Schema.org vocabulary support\" ;\n    lds:ontology &lt;ns/#&gt; .</pre>\n        <p>Then upload the stylesheet into the package document and add <code>ac:stylesheet</code> naming that upload, which is where a registry published with <samp>ldh push</samp> gets it:</p>\n        <pre>package=\"https://packages.example.com/schema.org/\"\n\nupload=$(ldh add file --title schema.xsl --file schema.xsl \"$package\")\necho \"INSERT { &lt;${package}#this&gt; &lt;https://w3id.org/atomgraph/client#stylesheet&gt; &lt;$upload&gt; } WHERE { }\" | ldh patch \"$package\"</pre>\n        <p>A dataspace importing the package dereferences its descriptor, ontology and stylesheet anonymously, so all three have to be readable without a certificate.</p>\n    </div>\n    <div>\n        <h2 id=\"test-installation\">Test installation</h2>\n        <p>Declare the <code>ldh:import</code> triple in a test dataspace's <samp>settings</samp> document — see <a href=\"../../reference/administration/packages/#management\">Management</a> for the command.</p>\n    </div>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .

<https://docs.linkeddatahub.com/extending/create-packages/>
        a       <https://w3id.org/atomgraph/linkeddatahub/document-hierarchy#Item>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>
                <https://docs.linkeddatahub.com/extending/create-packages/#content>;
        <http://purl.org/dc/terms/created>
                "2026-10-17T19:38:53.503Z"^^<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>
                "Bundle the ontology and the stylesheet for your own vocabulary as a reusable package";
        <http://purl.org/dc/terms/modified>
                "2026-10-17T19:58:35.479Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/title>
                "Create packages";
        <http://rdfs.org/sioc/ns#has_container>
                <https://docs.linkeddatahub.com/extending/>;
        <http://www.w3.org/ns/auth/acl#owner>
                <https://admin.linkeddatahub.com/acl/agents/5ba81960-d511-4a3b-8b9a-cb5bb278dd95/#this> .
