<https://docs.linkeddatahub.com/reference/imports/rdf/>
        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/imports/rdf/#content>;
        <http://purl.org/dc/terms/created>
                "2026-10-25T17:34:47.583Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/creator>
                <https://admin.linkeddatahub.com/acl/agents/01fe43e2-f80e-4312-b37e-86063a80e4f9/#this>;
        <http://purl.org/dc/terms/description>
                "RDF imports and transforming RDF using SPARQL CONSTRUCT";
        <http://purl.org/dc/terms/modified>
                "2026-10-27T12:17:12.953Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/title>
                "RDF imports";
        <http://rdfs.org/sioc/ns#has_container>
                <https://docs.linkeddatahub.com/reference/imports/>;
        <http://www.w3.org/ns/auth/acl#owner>
                <https://admin.linkeddatahub.com/acl/agents/01fe43e2-f80e-4312-b37e-86063a80e4f9/#this> .

<https://docs.linkeddatahub.com/reference/imports/rdf/#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 imports and transforming RDF using SPARQL CONSTRUCT</p>\n    <div class=\"ac-alert va-informative\" role=\"status\">\n        <span class=\"ac-alert-ic\"><span aria-hidden=\"true\" class=\"msi outline\">info</span></span>\n        <div class=\"ac-alert-body\">\n            <p class=\"ac-alert-text\">Read the shared <a href=\"../#mapping-queries\">mapping query rules</a> first — they apply to CSV and RDF imports alike.</p>\n        </div>\n    </div>\n    <p>An RDF import is a combination of multiple resources:</p>\n    <dl>\n        <dt>File</dt>\n        <dd>The RDF file to be imported (<code>ldh:file</code>)</dd>\n        <dt>Transformation query (optional)</dt>\n        <dd>A user-defined <code>CONSTRUCT</code> query that transforms the input RDF into a different RDF representation (<code>spin:query</code>)</dd>\n        <dt>Graph (optional)</dt>\n        <dd>The target graph (document) to which converted items are appended with <a href=\"../../http-api/documents/#ld-post\"><code>POST</code></a> (<code>sd:name</code>)</dd>\n    </dl>\n    <div class=\"ac-alert va-informative\" role=\"status\">\n        <span class=\"ac-alert-ic\"><span aria-hidden=\"true\" class=\"msi outline\">info</span></span>\n        <div class=\"ac-alert-body\">\n            <p class=\"ac-alert-text\">Specify either the transformation query or the target graph, not both.</p>\n        </div>\n    </div>\n    <p>If the graph is specified, the resulting RDF data is appended to a single document.</p>\n    <p>If the transformation query is specified, the resulting data should contain document instances in order to attach to the <a href=\"../../dataset/#structure\">document hierarchy</a>. The documents have to be URI resources. The document graphs have to be <em>explicitly specified</em> using a <code>GRAPH</code> block in the <code>CONSTRUCT</code> template (a\n        <a href=\"https://jena.apache.org/documentation/query/construct-quad.html\" target=\"_blank\">Jena-specific extension</a> of SPARQL 1.1); otherwise the import result ends up in the default graph of the dataspace's RDF dataset, which LinkedDataHub does not serve.</p>\n    <p>Imports run in the background — see <a href=\"../#execution\">import execution</a>.</p>\n    <p>The resulting RDF is split into documents (named graphs), which are then created one by one and validated against <a href=\"../../administration/ontologies/#constraints\">constraints</a> as they are created.\n        Constraint violations, if any, are attached to the import item.</p>\n    <div>\n        <h2 id=\"example\">Running example</h2>\n        <p>The running example connects the Northwind Traders dataspace to the <a href=\"https://unesco-thesaurus.demo.linkeddatahub.com/\" target=\"_blank\">UNESCO Thesaurus dataspace</a>:\n            each Northwind product category is mapped to the thesaurus concept it corresponds to, using the SKOS mapping relations. The mapping file\n            also types the categories as <code>skos:Concept</code>, which makes the relations applicable (and lets the\n            <a href=\"../../administration/packages/\">taxonomy editor package</a> render the categories as concepts):</p>\n        <pre>@prefix skos:   &lt;http://www.w3.org/2004/02/skos/core#&gt; .\n\n# 1 Beverages -&gt; Beverages\n&lt;https://northwind-traders.demo.linkeddatahub.com/categories/1/#this&gt; a skos:Concept ;\n    skos:closeMatch &lt;https://unesco-thesaurus.demo.linkeddatahub.com/concepts/concept3683/#this&gt; .\n\n# 2 Condiments -&gt; Food (no finer concept in the thesaurus)\n&lt;https://northwind-traders.demo.linkeddatahub.com/categories/2/#this&gt; a skos:Concept ;\n    skos:broadMatch &lt;https://unesco-thesaurus.demo.linkeddatahub.com/concepts/concept1812/#this&gt; .\n\n# 3 Confections -&gt; Sugar\n&lt;https://northwind-traders.demo.linkeddatahub.com/categories/3/#this&gt; a skos:Concept ;\n    skos:relatedMatch &lt;https://unesco-thesaurus.demo.linkeddatahub.com/concepts/concept3495/#this&gt; .\n\n# … one mapping per category, 8 in total</pre>\n        <p class=\"exhibit-links\">Source: <a href=\"https://github.com/AtomGraph/LinkedDataHub-Apps/blob/master/demo/northwind-traders/categories/unesco-mappings.ttl\" target=\"_blank\">categories/unesco-mappings.ttl</a></p>\n        <p>Imported with the <em>graph</em> variant, the whole file is appended to one target document — a single graph of mappings that describe the\n            two dataspaces' resources:</p>\n        <pre>&lt;#mappings-import&gt; a ldh:RDFImport ;\n    dct:title \"UNESCO category mappings\" ;\n    ldh:file &lt;https://localhost:4443/uploads/751b60d9516f4630a6d39bc304ce649ec3a740e9&gt; ;\n    sd:name &lt;https://localhost:4443/categories/mappings/&gt; .</pre>\n    </div>\n    <div>\n        <h2 id=\"transformation\">Transformation</h2>\n        <p>This step is used to transform the RDF data that is being imported, if necessary (to a different vocabulary, for example). It also connects instances in the imported data to the documents in LinkedDataHub's <a href=\"../../dataset/\">dataset</a>.</p>\n        <p>The mapping is a user-defined SPARQL <code>CONSTRUCT</code> that follows the shared <a href=\"../#mapping-queries\">mapping query rules</a>.</p>\n        <div>\n            <h3 id=\"transformation-example\">Example</h3>\n            <p>Imported with the <em>transformation</em> variant instead, each mapping is routed into its own category's document. The mapping file\n                describes the <em>demo's</em> categories, so the transformation also rebases their URIs onto this dataspace — an ETL step that makes the\n                same file installable against any base URI:</p>\n            <pre>PREFIX skos:  &lt;http://www.w3.org/2004/02/skos/core#&gt;\n\nCONSTRUCT\n{\n    GRAPH ?graph\n    {\n        ?category a skos:Concept ;\n            ?mapping ?concept .\n    }\n}\nWHERE\n{\n    ?remote a skos:Concept ;\n        ?mapping ?concept .\n    FILTER(?mapping IN (skos:closeMatch, skos:broadMatch, skos:relatedMatch))\n\n    # rebase the demo's category URIs onto this dataspace's $base\n    BIND(strafter(str(?remote), \"northwind-traders.demo.linkeddatahub.com/\") AS ?path)\n    BIND(uri(concat(str($base), strbefore(?path, \"#\"))) AS ?graph)\n    BIND(uri(concat(str($base), ?path)) AS ?category)\n}</pre>\n            <p>When the import is complete, each category document carries its mapping. The Beverages document gains:</p>\n            <pre>@prefix skos: &lt;http://www.w3.org/2004/02/skos/core#&gt; .\n\n&lt;https://localhost:4443/categories/1/#this&gt; a skos:Concept ;\n    skos:closeMatch &lt;https://unesco-thesaurus.demo.linkeddatahub.com/concepts/concept3683/#this&gt; .</pre>\n            <p>The mapped concept URIs stay remote on purpose: following one leads into the UNESCO Thesaurus dataspace through the\n                <a href=\"../../http-api/linked-data-proxy/#ld-proxy\">Linked Data proxy</a>, and queries can join the two dataspaces over their\n                <a href=\"../../http-api/linked-data-proxy/#federation\">federated</a> SPARQL endpoints.</p>\n        </div>\n    </div>\n    <div>\n        <h2 id=\"management\">Management</h2>\n        <table>\n            <caption class=\"ac-vh\">RDF import actions and their CLI commands</caption>\n            <thead>\n                <tr>\n                    <th scope=\"col\">Action</th>\n                    <th scope=\"col\">CLI command</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <th scope=\"row\">Create RDF import from an uploaded file (<samp>--file</samp>, with <samp>--query</samp> or <samp>--graph</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\">Import a local RDF file end-to-end (<samp>--rdf-file</samp>, <samp>--content-type</samp>, with <samp>--query-file</samp> or <samp>--graph</samp>)</th>\n                    <td><a href=\"../../command-line-interface/#commands\"><samp>ldh import rdf</samp></a></td>\n                </tr>\n            </tbody>\n        </table>\n    </div>\n    <p class=\"ldh-body-lg\">If you are ready to import some RDF, follow the user guide on <a href=\"../../../user-guide/import-data/import-rdf-data/\">creating an RDF import</a>.</p>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>;
        <http://www.w3.org/2000/01/rdf-schema#seeAlso>
                <https://www.w3.org/TR/sparql11-query/#construct> .

<https://www.w3.org/TR/sparql11-query/#construct>
        <http://purl.org/dc/terms/title>
                "SPARQL 1.1 Query Language: CONSTRUCT" .
