<https://docs.linkeddatahub.com/reference/stylesheets/>
        a       <https://www.w3.org/ns/ldt/document-hierarchy#Item>;
        <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>
                <https://docs.linkeddatahub.com/reference/stylesheets/#content>;
        <http://purl.org/dc/terms/created>
                "2026-06-16T20:33:54.111Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
        <http://purl.org/dc/terms/creator>
                <https://admin.linkeddatahub.com/acl/agents/0ab4a0f7-1ab0-4d0c-8efc-63a79a2e9a10/#this>;
        <http://purl.org/dc/terms/description>
                "Built-in XSLT and CSS stylesheets";
        <http://purl.org/dc/terms/title>
                "Stylesheets";
        <http://rdfs.org/sioc/ns#has_container>
                <https://docs.linkeddatahub.com/reference/>;
        <http://www.w3.org/ns/auth/acl#owner>
                <https://admin.linkeddatahub.com/acl/agents/0ab4a0f7-1ab0-4d0c-8efc-63a79a2e9a10/#this> .

<https://docs.linkeddatahub.com/reference/stylesheets/#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=\"lead\">Built-in XSLT and CSS stylesheets</p>\n    <div>\n        <h2 id=\"xslt\">XSLT</h2>\n        <p>XSLT is a functional, Turing-complete XML transformation language.</p>\n        <p>LinkedDataHub's <a href=\"https://www.w3.org/TR/xslt-30/\" target=\"_blank\">XSLT 3.0</a> stylesheets work by transforming <a href=\"https://www.w3.org/TR/rdf-syntax-grammar/\" target=\"_blank\">RDF/XML</a> response body from the underlying <a href=\"../http-api/\" target=\"_blank\">HTTP API</a>. Additional metadata from RDF vocabularies is used to improve user experience.</p>\n        <div>\n            <h3 id=\"rdf-xml-plain\">Plain RDF/XML</h3>\n            <p><a href=\"https://www.w3.org/TR/rdf-syntax-grammar/\" target=\"_blank\">RDF/XML</a> is an important RDF syntax which functions as a bridge to the XML technology stack. The stylesheets use Jena's <a href=\"https://jena.apache.org/documentation/io/rdfxml_howto.html#rdfxml-rdfxml-abbrev\" target=\"_blank\">\"plain\" RDF/XML</a> output which groups statements by subject and does not nest resource descriptions. This allows for predictable XPath patterns:</p>\n            <ul>\n                <li><code>/rdf:RDF</code> — represents the RDF graph</li>\n                <li><code>/rdf:RDF/rdf:Description</code> or <code>/rdf:RDF/*[*][@rdf:about] | /rdf:RDF/*[*][@rdf:nodeID]</code> — resource description which contains properties</li>\n                <li><code>/rdf:RDF/rdf:Description/@rdf:about</code> — subject resource URI</li>\n                <li><code>/rdf:RDF/rdf:Description/@rdf:nodeID</code> — subject blank node ID</li>\n                <li><code>/rdf:RDF/rdf:Description/*</code> predicate (e.g. <code>rdf:type</code>) whose URI is <code>concat(namespace-uri(), local-name())</code></li>\n                <li><code>/rdf:RDF/rdf:Description/*/@rdf:resource</code> — object resource</li>\n                <li><code>/rdf:RDF/rdf:Description/*/@rdf:nodeID</code> — object blank node ID</li>\n                <li><code>/rdf:RDF/rdf:Description/*/text()</code> — literal value</li>\n            </ul>\n        </div>\n        <div>\n            <h3 id=\"stylesheets\">Stylesheets</h3>\n            <p>XSLT stylesheet components used by LinkedDataHub:</p>\n            <dl>\n                <dt>Includes</dt>\n                <dd><code>&lt;xsl:include&gt;</code> is used to include one stylesheet into another. The import mechanism is specified in <a href=\"https://www.w3.org/TR/xslt-30/#include\" target=\"_blank\">3.10.2 Stylesheet Inclusion</a> the XSLT 3.0 specification. The templates from the included stylesheets have the same priority as those of the importing stylesheet.</dd>\n                <dt>Imports</dt>\n                <dd><code>&lt;xsl:import&gt;</code> is used to import one stylesheet into another. The import mechanism is specified in <a href=\"https://www.w3.org/TR/xslt-30/#import\" target=\"_blank\">3.10.3 Stylesheet Import</a> the XSLT 3.0 specification. The templates from the imported stylesheets have lower priority than those of the importing stylesheet.</dd>\n                <dt>Parameters</dt>\n                <dd>XSD-typed <a href=\"#parameters\">global parameters</a> passed to the stylesheet</dd>\n                <dt>Keys</dt>\n                <dd>Lookup <a href=\"#keys\">keys</a></dd>\n                <dt>Templates</dt>\n                <dd><a href=\"#templates\">Template rules</a> for XML node processing</dd>\n            </dl>\n            <p>One XSLT stylesheet can be specified per application. In order to reuse LinkedDataHub's built-in templates, it should import the <a href=\"https://github.com/AtomGraph/LinkedDataHub/blob/master/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/layout.xsl\" target=\"_blank\">system stylesheet <samp>layout.xsl</samp></a> and only override the necessary templates. That is however not a requirement, the stylesheet could also use its own independent transformation logic.</p>\n            <p>If there is no stylesheet specified for the application, the system stylesheet is used. It defines the overall layout and imports resource-level and container-specific stylesheets, as well as per-vocabulary stylesheets.</p>\n            <p>Note that LinkedDataHub itself imports stylesheets from <a href=\"https://github.com/AtomGraph/Web-Client\" target=\"_blank\">Web-Client</a>, which uses the same template modes but produces a much simpler layout.</p>\n            <p>There is also a special <a href=\"https://github.com/AtomGraph/LinkedDataHub/blob/master/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/client.xsl\" target=\"_blank\">client-side stylesheet</a> which is not used to render a full layout, but only manipulate DOM elements in the browser in response to user or system events. It is processed using <a href=\"http://www.saxonica.com/saxon-js/index.xml\" target=\"_blank\">Saxon-JS</a> which provides IXSL (<a href=\"https://www.saxonica.com/saxon-js/documentation/index.html#!ixsl-extension\" target=\"_blank\">client-side extensions for XSLT</a>). It imports and reuses some of the same sub-stylesheets as the server-side system stylesheet does, but avoids loading per-vocabulary stylesheets in order to improve page load time. Templates of the client-side stylesheet can also be overridden.</p>\n        </div>\n        <div>\n            <h3 id=\"namespaces\">Namespaces</h3>\n            <table class=\"table\">\n                <caption>Main namespaces used in XSLT stylesheets</caption>\n                <thead>\n                    <tr>\n                        <th>Prefix</th>\n                        <th>Namespace</th>\n                        <th>Vocabulary</th>\n                        <th>Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td><code>rdf:</code></td>\n                        <td><code>http://www.w3.org/1999/02/22-rdf-syntax-ns#</code></td>\n                        <td><a href=\"https://www.w3.org/TR/rdf11-concepts/#vocabularies\" target=\"_blank\">The RDF Concepts Vocabulary</a></td>\n                        <td>Namespace for the <a href=\"https://www.w3.org/TR/rdf-syntax-grammar/\" target=\"_blank\">RDF/XML</a> elements, mostly used for matching input data</td>\n                    </tr>\n                    <tr>\n                        <td><code>srx:</code></td>\n                        <td><code>http://www.w3.org/2005/sparql-results#</code></td>\n                        <td></td>\n                        <td>Namespace for the <a href=\"https://www.w3.org/TR/rdf-sparql-XMLres/\" target=\"_blank\">SPARQL Query Results XML</a> elements, mostly used for matching input data</td>\n                    </tr>\n                    <tr>\n                        <td><code>xsl:</code></td>\n                        <td><code>http://www.w3.org/1999/XSL/Transform</code></td>\n                        <td></td>\n                        <td>Namespace for the XSLT stylesheet elements</td>\n                    </tr>\n                    <tr>\n                        <td><code>ixsl:</code></td>\n                        <td><code>http://saxonica.com/ns/interactiveXSLT</code></td>\n                        <td></td>\n                        <td>Namespace for the <a href=\"https://www.saxonica.com/saxon-js/documentation/index.html#!ixsl-extension\" target=\"_blank\">Interactive XSL extensions</a></td>\n                    </tr>\n                    <tr>\n                        <td><code>bs2:</code></td>\n                        <td><code>http://graphity.org/xsl/bootstrap/2.3.2</code></td>\n                        <td></td>\n                        <td>XSLT-only namespace that is used for <a href=\"https://getbootstrap.com/2.3.2/\" target=\"_blank\">Bootstrap 2.3.2</a>-based layout templates</td>\n                    </tr>\n                    <tr>\n                        <td><code>xhtml:</code></td>\n                        <td><code>http://www.w3.org/2011/http#</code></td>\n                        <td></td>\n                        <td>XSLT-only namespace that is used for generic (X)HTML templates</td>\n                    </tr>\n                    <tr>\n                        <td><code>ldt:</code></td>\n                        <td><code>https://www.w3.org/ns/ldt#</code></td>\n                        <td><a href=\"https://atomgraph.github.io/Linked-Data-Templates/#vocabulary\" target=\"_blank\">Linked Data Templates</a></td>\n                        <td>LDT processing-related concepts</td>\n                    </tr>\n                    <tr>\n                        <td><code>ac:</code></td>\n                        <td><code>https://w3id.org/atomgraph/client#</code></td>\n                        <td><a href=\"https://github.com/AtomGraph/Web-Client\" target=\"_blank\">Web-Client</a> vocabulary</td>\n                        <td>Client-side concepts</td>\n                    </tr>\n                    <tr>\n                        <td><code>lapp:</code></td>\n                        <td><code>https://w3id.org/atomgraph/linkeddatahub/apps#</code></td>\n                        <td><a href=\"../administration/ontologies/#apl-ont\" target=\"_blank\">LinkedDataHub application ontology</a></td>\n                        <td>LinkedDataHub application concepts</td>\n                    </tr>\n                    <tr>\n                        <td><code>lacl:</code></td>\n                        <td><code>https://w3id.org/atomgraph/linkeddatahub/admin/acl#</code></td>\n                        <td>LinkedDataHub ACL ontology</td>\n                        <td>ACL concepts</td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div>\n            <h3 id=\"parameters\">Parameters</h3>\n            <p>Both global (i.e. stylesheet-level) and template parameters are declared using <code>&lt;xsl:param&gt;</code>. LinkedDataHub sets the following global parameters by default (the list is non-exhaustive):</p>\n            <table class=\"table\">\n                <thead>\n                    <tr>\n                        <th>Parameter</th>\n                        <th>Type</th>\n                        <th>Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td><code>$ldt:base</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>Base URI of the current application</td>\n                    </tr>\n                    <tr>\n                        <td><code>$lapp:Application</code></td>\n                        <td><code>document-node()?</code></td>\n                        <td>RDF/XML metadata of the current application</td>\n                    </tr>\n                    <tr>\n                        <td><code>$foaf:Agent</code></td>\n                        <td><code>document-node()?</code></td>\n                        <td>RDF/XML metadata of the authenticated agent (if any)</td>\n                    </tr>\n                    <tr>\n                        <td><code>$ldh:requestUri</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>Full request URI including query string</td>\n                    </tr>\n                    <tr>\n                        <td><code>$ac:endpoint</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>SPARQL query endpoint URI (defaults to <code>resolve-uri('sparql', $ldt:base)</code>)</td>\n                    </tr>\n                    <tr>\n                        <td><code>$sd:endpoint</code></td>\n                        <td><code>xs:anyURI?</code></td>\n                        <td>Service-description endpoint URI, if different from <code>$ac:endpoint</code></td>\n                    </tr>\n                    <tr>\n                        <td><code>$acl:agent</code></td>\n                        <td><code>xs:anyURI?</code></td>\n                        <td>URI of the authenticated agent</td>\n                    </tr>\n                    <tr>\n                        <td><code>$acl:mode</code></td>\n                        <td><code>xs:anyURI*</code></td>\n                        <td>ACL access modes granted for the current request</td>\n                    </tr>\n                    <tr>\n                        <td><code>$ac:mode</code></td>\n                        <td><code>xs:anyURI*</code></td>\n                        <td>Current layout mode (derived: <code>ldh:ContentMode</code> if the document has content blocks, otherwise <code>ac:ReadMode</code>)</td>\n                    </tr>\n                    <tr>\n                        <td><code>$lapp:origin</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>Origin URI of the current application</td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div>\n            <h3 id=\"functions\">Functions</h3>\n            <p>LinkedDataHub and Web-Client provide XSLT functions available to all stylesheets.</p>\n            <h4>URI utility functions</h4>\n            <table class=\"table\">\n                <thead>\n                    <tr>\n                        <th>Function</th>\n                        <th>Returns</th>\n                        <th>Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td><code>ac:absolute-path($href as xs:anyURI)</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>Strips query string and fragment from a URI, returning the path-only form</td>\n                    </tr>\n                    <tr>\n                        <td><code>ac:build-uri(<br></br>  $path as xs:anyURI?,<br></br>  $params as map(xs:string, xs:string*)<br></br>)</code></td>\n                        <td><code>xs:anyURI?</code></td>\n                        <td>Appends a percent-encoded query string built from the parameter map to <code>$path</code></td>\n                    </tr>\n                    <tr>\n                        <td><code>ac:document-uri($uri)</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>Strips the fragment identifier from a URI, making it suitable for use with <code>document()</code></td>\n                    </tr>\n                    <tr>\n                        <td><code>ac:fragment-id($uri as xs:anyURI)</code></td>\n                        <td><code>xs:string?</code></td>\n                        <td>Extracts the fragment identifier (the part after <code>#</code>)</td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:request-uri()</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>Returns the full request URI including query string (server-side only)</td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:base-uri($node as node())</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>Returns the base URI of an XML node; wraps the built-in <code>base-uri()</code></td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:href($uri as xs:anyURI?)</code></td>\n                        <td><code>xs:anyURI</code></td>\n                        <td>Resolves a URI to a local href, proxying external URIs through the LinkedDataHub proxy. Overloads accept <code>$query-params as map(xs:string, xs:string*)</code> and <code>$fragment as xs:string?</code></td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:query-params($mode as xs:anyURI*)</code></td>\n                        <td><code>map(xs:string, xs:string*)</code></td>\n                        <td>Builds a query parameter map for the given layout mode(s). Overload also accepts <code>$forClass as xs:anyURI?</code></td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:parse-query-params($query-string as xs:string)</code></td>\n                        <td><code>map(xs:string, xs:string*)</code></td>\n                        <td>Parses a URL query string into a map of key to value(s)</td>\n                    </tr>\n                </tbody>\n            </table>\n            <h4>RDF metadata functions</h4>\n            <table class=\"table\">\n                <thead>\n                    <tr>\n                        <th>Function</th>\n                        <th>Returns</th>\n                        <th>Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td><code>ac:label($resource as element())</code></td>\n                        <td><code>xs:string?</code></td>\n                        <td>Extracts a human-readable label from an RDF resource description, trying multiple vocabulary properties</td>\n                    </tr>\n                    <tr>\n                        <td><code>ac:description($resource as element())</code></td>\n                        <td><code>xs:string?</code></td>\n                        <td>Extracts a human-readable description from an RDF resource description</td>\n                    </tr>\n                </tbody>\n            </table>\n            <h4>HTTP and SPARQL functions</h4>\n            <table class=\"table\">\n                <thead>\n                    <tr>\n                        <th>Function</th>\n                        <th>Returns</th>\n                        <th>Description</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td><code>ldh:query-result($endpoint as xs:anyURI, $query as xs:string)</code></td>\n                        <td><code>document-node()</code></td>\n                        <td>Executes a SPARQL query against the given endpoint and returns the result document (cached)</td>\n                    </tr>\n                    <tr>\n                        <td><code>ldh:send-request(<br></br>  $href as xs:anyURI,<br></br>  $method as xs:string,<br></br>  $media-type as xs:string?,<br></br>  $body as item()?,<br></br>  $headers as map(xs:string, xs:string)<br></br>)</code></td>\n                        <td><code>document-node()?</code></td>\n                        <td>Makes an HTTP request and returns the response as a document (server-side extension function)</td>\n                    </tr>\n                </tbody>\n            </table>\n        </div>\n        <div>\n            <h3 id=\"templates\">Templates</h3>\n            <p>XSLT template components:</p>\n            <dl>\n                <dt>Match</dt>\n                <dd>XPath-based match pattern which either does or does not match an XML node</dd>\n                <dt>Mode</dt>\n                <dd>Allows to group templates and distinguish them from other groups which have the same match patterns (e.g. different layout modes)</dd>\n                <dt>Parameters</dt>\n                <dd>XSD-typed parameters passed to the template invocation</dd>\n                <dt>Body</dt>\n                <dd>Contains the XML output nodes as well as XSLT processing instructions</dd>\n            </dl>\n            <p>XSLT processing starts at the root of the RDF/XML document and produces HTML elements by applying templates on all of the RDF/XML nodes while moving down the XML tree.\n                In other words, it starts at the graph level, moves down to resource description elements, then to property elements, and ends with identifier attributes and literal text nodes.</p>\n            <p>Templates are applied (invoked) using <code>&lt;xsl:apply-templates&gt;</code>. Mode can be specified, e.g. <code>&lt;xsl:apply-templates mode=\"bs2:Header\"&gt;</code>. To stay in the current mode without explicitly specifying it, use <code>&lt;xsl:apply-templates mode=\"#current\"&gt;</code>. <code>&lt;xsl:with-param&gt;</code> is used to supply parameters.</p>\n            <p>LinkedDataHub provides the following default template modes, which are used to render the <a href=\"../user-interface/#layout-modes\" target=\"_blank\">layout modes</a>:</p>\n            <ul>\n                <li>Graph-level modes that apply to <code>rdf:RDF</code>\n                    <ul>\n                        <li><dfn>default mode</dfn> which renders full resource descriptions</li>\n                        <li><code>bs2:BlockList</code> renders a list of resources</li>\n                        <li><code>xhtml:Table</code> renders a table with resources as rows and properties as columns</li>\n                        <li><code>bs2:Grid</code> renders a gallery of thumbnails</li>\n                        <li><code>bs2:Form</code> which renders an <a href=\"https://atomgraph.github.io/RDF-POST/\" target=\"_blank\">RDF/POST</a> form for for creation of new resources (when <code>$ac:forClass</code> parameter is set) or editing of existing resource</li>\n                    </ul>\n                </li>\n                <li>Resource-level templates modes that apply to <code>rdf:Description</code>\n                    <ul>\n                        <li><dfn>default mode</dfn> renders full resource description (by default header and property list)</li>\n                        <li><code>bs2:Header</code> renders resource header (by default with type information)</li>\n                        <li><code>bs2:PropertyList</code> renders definition list with property names and values (by default grouped by resource types)</li>\n                    </ul>\n                </li>\n            </ul>\n            <p>When adding new user-defined modes, it is recommended to choose a new <a href=\"#namespaces\">namespace</a> for them as well as a user-defined prefix.</p>\n            <p>An example of a template that matches <code>rdf:Description</code>:</p>\n            <pre>&lt;xsl:template match=\"*[*][@rdf:about] | *[*][@rdf:nodeID]\"&gt;\n    &lt;xsl:param name=\"id\" as=\"xs:string?\"/&gt;\n    &lt;xsl:param name=\"class\" as=\"xs:string?\"/&gt;\n\n    &lt;div&gt;\n        &lt;xsl:if test=\"$id\"&gt;\n            &lt;xsl:attribute name=\"id\" select=\"$id\"/&gt;\n        &lt;/xsl:if&gt;\n        &lt;xsl:if test=\"$class\"&gt;\n            &lt;xsl:attribute name=\"class\" select=\"$class\"/&gt;\n        &lt;/xsl:if&gt;\n\n        &lt;xsl:apply-templates select=\".\" mode=\"bs2:Header\"/&gt;\n\n        &lt;xsl:apply-templates select=\".\" mode=\"bs2:PropertyList\"/&gt;\n    &lt;/div&gt;\n&lt;/xsl:template&gt;</pre>\n            <p><code>ldh:ContentList</code> mode renders the content specified by the <code>rdf:_1</code> value of the current document.</p>\n            <p>There are a few special template modes such as <code>ac:label</code> and <code>ac:description</code> and related functions <code>ac:label()</code> and <code>ac:description()</code> which are\n                used not to render layout but to extract metadata from resource descriptions. They can be used to retrieve a resource label and description no matter which RDF\n                vocabularies are used in the data. They do so by invoking templates of respective mode from vocabulary-specific stylesheets.</p>\n        </div>\n        <div>\n            <h3 id=\"overriding-templates\">Overriding templates</h3>\n            <p>Templates are overridden by redefining them in the importing stylesheet and providing the same or more specific match pattern and the same mode. The XSLT specification specifies exactly how template priorities are determined in <a href=\"https://www.w3.org/TR/xslt-30/#conflict\" target=\"_blank\">6.4 Conflict Resolution for Template Rules</a>.</p>\n            <p>The overriding template can then get the output of the overridden template by invoking either <code>&lt;xsl:apply-imports&gt;</code> or <code>&lt;xsl:next-match&gt;</code>. Read more about <a href=\"https://www.w3.org/TR/xslt-30/#apply-imports\" target=\"_blank\">6.7 Overriding Template Rules</a>.</p>\n            <p>Always override the most specific template, i.e. if you want to change how a property is rendered, do not override the template for resource description, only the one for the property.</p>\n        </div>\n        <div>\n            <h3 id=\"keys\">Keys</h3>\n            <p>Keys are a lookup mechanism. They are defined on the stylesheet level using <a href=\"https://www.w3.org/TR/xslt-30/#dt-key\" target=\"_blank\"><code>&lt;xsl:key&gt;</code></a> and invoked using the \n                <a href=\"https://www.w3.org/TR/xslt-30/#function-key\" target=\"_blank\"><code>key()</code></a> function. For example:</p>\n            <pre>&lt;xsl:key name=\"resources\" match=\"*[*][@rdf:about] | *[*][@rdf:nodeID]\" use=\"@rdf:about | @rdf:nodeID\"/&gt;\n\n&lt;xsl:template match=\"*\"&gt;\n    &lt;xsl:for-each select=\"key('resources', ldh:base-uri(.))\"&gt;\n        &lt;xsl:value-of select=\"ac:label(.)\"/&gt;\n    &lt;/xsl:for-each&gt;\n&lt;/xsl:template&gt;</pre>\n        </div>\n        <p>They key definition matches <code>rdf:Description</code> elements and uses their identifiers (URI or blank node ID). The template then looks up the RDF description of the <em>current resource</em>, i.e. the resource with URI that equals <code>ldh:base-uri(.)</code> which is the absolute URI of the current document, and outputs its label.</p>\n        <div>\n            <h3 id=\"loading-data\">Loading data</h3>\n            <p>The stylesheet is processing one main RDF/XML document at a time, which is supplied by the LinkedDataHub's HTML writer. However it is possible to load additional XML documents over HTTP \n                using the <a href=\"https://www.w3.org/TR/xslt-30/#function-document\" target=\"_blank\"><code>document()</code></a> XSLT function. To avoid XSLT errors on any possible error responses, it is advisable\n                to do a conditional check using the <a href=\"https://www.w3.org/TR/xpath-functions/#func-doc-available\" target=\"_blank\"><code>doc-available()</code></a> function before doing the actual <code>document()</code> call.</p>\n            <p>For example, instead of hardcoding the title of this document as <samp>Stylesheets</samp>, we can use the following code to load it and output it on the fly:</p>\n            <pre>&lt;xsl:value-of select=\"key('resources', 'https://docs.linkeddatahub.com/reference/stylesheet/', document('https://docs.linkeddatahub.com/reference/stylesheet/'))\"/&gt;</pre>\n            <p>In case this document changes its title, all such references would automatically render the updated title. On the other hand, it incurs the overhead of making an HTTP request.</p>\n            <p>LinkedDataHub's default stylesheets are using this feature extensively. In fact, one HTML page is rendered from a dozen of RDF/XML documents.</p>\n            <p>Built-in <a href=\"../administration/ontologies/#ontologies\" target=\"_blank\">ontologies</a> as well as some other system and well-known ontologies, have a local copy in\n                each LinkedDataHub instance. As a result, retrieving their descriptions by dereferencing their URIs using <code>document()</code> does not incur an HTTP request and is much faster. The URI-to-file mapping\n                is defined as Jena's <a href=\"https://jena.apache.org/documentation/io/rdf-input.html#configuring-a-locationmapper\" target=\"_blank\">location mapping</a> and can be found in\n                <a href=\"https://github.com/AtomGraph/LinkedDataHub/blob/master/src/main/resources/location-mapping.n3\" target=\"_blank\"><samp>location-mapping.n3</samp></a> and <a href=\"https://github.com/AtomGraph/LinkedDataHub/blob/master/src/main/resources/prefix-mapping.n3\" target=\"_blank\"><samp>prefix-mapping.n3</samp></a>.</p>\n            <p>Client-side stylesheets use <a href=\"https://www.saxonica.com/saxon-js/documentation/index.html#!ixsl-extension/instructions/schedule-action\" target=\"_blank\"><code>&lt;ixsl:schedule-action&gt;</code></a> (deprecated) and <a href=\"https://www.saxonica.com/saxonjs/documentation3/index.html#!ixsl-extension/instructions/promise\" target=\"_blank\"><code>&lt;ixsl:promise&gt;</code></a> to load XML documents asynchronously.</p>\n        </div>\n    </div>\n    <div>\n        <h2 id=\"css\">CSS</h2>\n        <p><a href=\"https://getbootstrap.com/2.3.2/\" target=\"_blank\">Bootstrap 2.3.2</a> theme is used with some customizations.</p>\n        <p>The CSS stylesheets is specified in the <code>xhtml:Style</code> XSLT template mode.</p>\n    </div>\n    <div>\n        <h2 id=\"javascript\">JavaScript</h2>\n        <p>The JavaScript files are specified in the <code>xhtml:Script</code> XSLT template mode.</p>\n        <p>LinkedDataHub only uses JavaScript for the functionality that cannot be achieved using client-side XSLT.</p>\n    </div>\n</div>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> .
