Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -675,6 +675,50 @@ exclude-result-prefixes="#all"
</xsl:for-each>
</xsl:function>

<!-- property-metadata fetch helpers: mirror the object-metadata pair above, but DESCRIBE the property URIs (rdfs:label / skos:prefLabel etc. resolved via the application's /ns ontology store) so that ac:property-label can resolve vocabulary labels client-side. Chain wiring: ldh:http-request-threaded(?, 'property-metadata-request', 'property-metadata-response') then ldh:set-property-metadata stores the body under 'property-metadata' for the tunnel consumed by ac:property-label. -->

<xsl:function name="ldh:load-property-metadata" as="map(*)" ixsl:updating="yes">
<xsl:param name="context" as="map(*)"/>

<xsl:sequence select="ldh:load-property-metadata($context, 'response')"/>
</xsl:function>

<xsl:function name="ldh:load-property-metadata" as="map(*)" ixsl:updating="yes">
<xsl:param name="context" as="map(*)"/>
<xsl:param name="response-key" as="xs:string"/>
<xsl:variable name="response" select="$context($response-key)" as="map(*)"/>
<xsl:variable name="property-uris" as="xs:string*" select="
if ($response?status = 200 and $response?media-type = 'application/rdf+xml')
then distinct-values($response?body/rdf:RDF/rdf:Description/*/concat(namespace-uri(), local-name()))
else ()"/>
<xsl:variable name="query-string" select="$property-metadata-query || ' VALUES $Type { ' || string-join(for $uri in $property-uris return '&lt;' || $uri || '&gt;', ' ') || ' }'" as="xs:string"/>
<xsl:variable name="request" select="map{ 'method': 'POST', 'href': ldh:href(resolve-uri('ns', ldt:base())), 'media-type': 'application/sparql-query', 'body': $query-string, 'headers': map{ 'Accept': 'application/rdf+xml' } }" as="map(*)"/>

<xsl:message>ldh:load-property-metadata</xsl:message>

<xsl:sequence select="map:merge(($context, map{ 'property-metadata-request': $request }))"/>
</xsl:function>

<xsl:function name="ldh:set-property-metadata" as="map(*)" ixsl:updating="yes">
<xsl:param name="context" as="map(*)"/>
<xsl:variable name="response" select="$context('property-metadata-response')" as="map(*)"/>

<xsl:message>ldh:set-property-metadata</xsl:message>

<xsl:for-each select="$response">
<xsl:choose>
<xsl:when test="?status = 200 and ?media-type = 'application/rdf+xml'">
<xsl:variable name="property-metadata" select="?body" as="document-node()?"/>
<xsl:sequence select="map:merge(($context, map{ 'property-metadata': $property-metadata }))"/>
</xsl:when>
<xsl:otherwise>
<!-- ignore property metadata loading errors - treat as empty metadata -->
<xsl:sequence select="$context"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:function>

<xsl:function name="ldh:hide-block-progress-bar" as="map(*)" ixsl:updating="yes">
<xsl:param name="context" as="map(*)"/>
<xsl:param name="ignored" as="item()?"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -665,10 +665,12 @@ extension-element-prefixes="ixsl"
<xsl:template match="rdf:RDF" mode="xhtml:Table">
<xsl:param name="id" as="xs:string?"/>
<xsl:param name="class" select="'table table-bordered table-striped'" as="xs:string?"/>
<xsl:param name="property-uris" select="distinct-values(*/*/concat(namespace-uri(), local-name()))" as="xs:string*"/>
<xsl:param name="property-metadata" select="if (exists($property-uris)) then ldh:send-request(resolve-uri('ns', ldt:base()), 'POST', 'application/sparql-query', 'DESCRIBE $Type' || ' VALUES $Type { ' || string-join(for $uri in $property-uris return '&lt;' || $uri || '&gt;', ' ') || ' }', map{ 'Accept': 'application/rdf+xml' }) else ()" as="document-node()?" tunnel="yes"/>
<xsl:param name="predicates" as="element()*">
<xsl:for-each-group select="*/*" group-by="concat(namespace-uri(), local-name())">
<xsl:sort select="ac:property-label(.)" order="ascending" lang="{$ldt:lang}" use-when="system-property('xsl:product-name') = 'SAXON'"/>
<xsl:sort select="ac:property-label(.)" order="ascending" use-when="system-property('xsl:product-name') eq 'SaxonJS'"/>
<xsl:sort select="if ($property-metadata) then ac:property-label(., $property-metadata) else ac:property-label(.)" order="ascending" lang="{$ldt:lang}" use-when="system-property('xsl:product-name') = 'SAXON'"/>
<xsl:sort select="if ($property-metadata) then ac:property-label(., $property-metadata) else ac:property-label(.)" order="ascending" use-when="system-property('xsl:product-name') eq 'SaxonJS'"/>

<xsl:sequence select="current-group()[1]"/>
</xsl:for-each-group>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,19 @@ exclude-result-prefixes="#all"
</xsl:variable>
<xsl:sequence select="upper-case(substring($labels[1], 1, 1)) || substring($labels[1], 2)"/>
</xsl:function>


<xsl:function name="ac:object-label" as="xs:string?">
<xsl:param name="object" as="node()"/>
<xsl:param name="object-metadata" as="document-node()"/>

<xsl:variable name="labels" as="xs:string*">
<xsl:apply-templates select="$object" mode="ac:object-label">
<xsl:with-param name="object-metadata" select="$object-metadata" tunnel="yes"/>
</xsl:apply-templates>
</xsl:variable>
<xsl:sequence select="$labels[1]"/>
</xsl:function>

<xsl:template match="@rdf:resource | @rdf:nodeID | srx:uri" mode="ac:object-label" priority="1">
<xsl:param name="object-metadata" as="document-node()?" tunnel="yes"/>
<xsl:variable name="this" select="." as="xs:anyURI"/>
Expand Down Expand Up @@ -404,12 +416,17 @@ exclude-result-prefixes="#all"
<xsl:apply-templates select="key('resources', $this)" mode="ac:label"/>
</xsl:when>
<xsl:when test="$property-metadata/key('resources', $this, .)">
<xsl:message>ac:property-label mode B $this: <xsl:value-of select="$this"/></xsl:message>

<xsl:apply-templates select="$property-metadata/key('resources', $this, .)" mode="ac:label"/>
</xsl:when>
<xsl:when test="doc-available(namespace-uri()) and key('resources', $this, document(namespace-uri()))" use-when="system-property('xsl:product-name') = 'SAXON'">
<xsl:when test="doc-available(namespace-uri()) and key('resources', $this, document(namespace-uri()))">
<xsl:message>ac:property-label mode C $this: <xsl:value-of select="$this"/></xsl:message>
<xsl:apply-templates select="key('resources', $this, document(namespace-uri()))" mode="ac:label"/>
</xsl:when>
<xsl:otherwise>
<xsl:message>ac:property-label mode D $this: <xsl:value-of select="$this"/></xsl:message>

<xsl:sequence select="local-name()"/>
</xsl:otherwise>
</xsl:choose>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,25 @@ exclude-result-prefixes="#all">
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&sd;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&sd;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&sh;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&sh;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&nfo;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&nfo;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('http://www.semanticdesktop.org/ontologies/2007/01/19/nie#')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('http://www.semanticdesktop.org/ontologies/2007/01/19/nie#'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&http;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&http;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&sc;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&sc;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&ldt;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&ldt;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&c;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&c;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&sioc;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&sioc;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&void;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&void;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&foaf;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&foaf;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&spl;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&spl;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&cert;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&cert;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('http://www.w3.org/ns/prov#')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('http://www.w3.org/ns/prov#'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&geo;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&geo;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('http://www.w3.org/2004/02/skos/core#')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('http://www.w3.org/2004/02/skos/core#'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('http://www.w3.org/2006/time#')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('http://www.w3.org/2006/time#'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('http://purl.org/dc/elements/1.1/')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('http://purl.org/dc/elements/1.1/'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('&dct;')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('&dct;'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('http://purl.org/dc/dcmitype/')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('http://purl.org/dc/dcmitype/'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('http://purl.org/goodrelations/v1#')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('http://purl.org/goodrelations/v1#'))), 'accept': 'application/rdf+xml' })"/>
<xsl:map-entry key="resolve-uri(ac:document-uri(xs:anyURI('http://usefulinc.com/ns/doap#')), $ac:contextUri)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri(xs:anyURI('http://usefulinc.com/ns/doap#'))), 'accept': 'application/rdf+xml' })"/>
<xsl:if test="$acl:agent">
<xsl:map-entry key="ac:document-uri($acl:agent)" select="ac:build-uri($ldt:base, map{ 'uri': string(ac:document-uri($acl:agent)), 'accept': 'application/rdf+xml' })"/>
</xsl:if>
Expand Down Expand Up @@ -777,6 +796,7 @@ exclude-result-prefixes="#all">
<xsl:param name="endpoint" select="sd:endpoint()" as="xs:anyURI"/>
<xsl:param name="property-uris" select="distinct-values(*/concat(namespace-uri(), local-name()))" as="xs:anyURI*"/>
<xsl:param name="property-metadata" select="ldh:send-request(resolve-uri('ns', $ldt:base), 'POST', 'application/sparql-query', 'DESCRIBE ' || string-join(for $uri in distinct-values(/rdf:RDF/*/*/concat(namespace-uri(), local-name())) return '&lt;' || $uri || '&gt;', ' '), map{ 'Accept': 'application/rdf+xml' })" as="document-node()"/>
<xsl:param name="object-metadata" as="document-node()?" tunnel="yes"/>
<xsl:variable name="local-doc" select="ldh:query-result($endpoint, 'DESCRIBE &lt;' || @rdf:about || '&gt;')" as="document-node()"/>
<xsl:variable name="original-doc" as="document-node()">
<xsl:try>
Expand Down Expand Up @@ -824,7 +844,7 @@ exclude-result-prefixes="#all">
<dl class="dl-horizontal">
<xsl:apply-templates select="$properties-original" mode="#current">
<xsl:sort select="ac:property-label(., $property-metadata)" order="ascending" lang="{$ldt:lang}"/>
<xsl:sort select="if (exists((text(), @rdf:resource, @rdf:nodeID))) then ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1]) else()" order="ascending" lang="{$ldt:lang}"/>
<xsl:sort select="if (exists((text(), @rdf:resource, @rdf:nodeID))) then (if ($object-metadata) then ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1], $object-metadata) else ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1])) else ()" order="ascending" lang="{$ldt:lang}"/>
<xsl:with-param name="property-metadata" select="$property-metadata" tunnel="yes"/>
</xsl:apply-templates>
</dl>
Expand All @@ -849,7 +869,7 @@ exclude-result-prefixes="#all">
<dl class="dl-horizontal">
<xsl:apply-templates select="$properties-local" mode="#current">
<xsl:sort select="ac:property-label(., $property-metadata)" order="ascending" lang="{$ldt:lang}"/>
<xsl:sort select="if (exists((text(), @rdf:resource, @rdf:nodeID))) then ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1]) else()" order="ascending" lang="{$ldt:lang}"/>
<xsl:sort select="if (exists((text(), @rdf:resource, @rdf:nodeID))) then (if ($object-metadata) then ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1], $object-metadata) else ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1])) else ()" order="ascending" lang="{$ldt:lang}"/>
<xsl:with-param name="property-metadata" select="$property-metadata" tunnel="yes"/>
</xsl:apply-templates>
</dl>
Expand All @@ -874,7 +894,7 @@ exclude-result-prefixes="#all">
<dl class="dl-horizontal">
<xsl:apply-templates select="$properties-common" mode="#current">
<xsl:sort select="ac:property-label(., $property-metadata)" order="ascending" lang="{$ldt:lang}"/>
<xsl:sort select="if (exists((text(), @rdf:resource, @rdf:nodeID))) then ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1]) else()" order="ascending" lang="{$ldt:lang}"/>
<xsl:sort select="if (exists((text(), @rdf:resource, @rdf:nodeID))) then (if ($object-metadata) then ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1], $object-metadata) else ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1])) else ()" order="ascending" lang="{$ldt:lang}"/>
<xsl:with-param name="property-metadata" select="$property-metadata" tunnel="yes"/>
</xsl:apply-templates>
</dl>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ extension-element-prefixes="ixsl"
<xsl:template match="*[@rdf:about = '&acl;Access']" mode="ldh:logo">
<xsl:param name="class" as="xs:string?"/>

<xsl:attribute name="class" select="concat($class, ' ', 'btn-access-form')"/>
<xsl:attribute name="class" select="concat($class, ' ', 'btn-acl btn-access-form')"/>
</xsl:template>

<xsl:template match="*[rdf:type/@rdf:resource = '&http;Response'][lacl:requestAccess/@rdf:resource]" mode="ldh:logo">
Expand Down Expand Up @@ -744,10 +744,30 @@ extension-element-prefixes="ixsl"
</xsl:template>

<!-- PROPERTY LIST -->

<!-- suppress types in property list - we show them in the bs2:Header instead -->
<xsl:template match="rdf:type[@rdf:resource]" mode="bs2:PropertyList"/>

<!-- override outer bs2:PropertyList so sort keys consume tunneled $property-metadata and $object-metadata
(tunnel params don't cross xsl:function boundaries, so 1-arg ac:property-label/ac:object-label can't see them) -->
<xsl:template match="*[*][@rdf:about] | *[*][@rdf:nodeID]" mode="bs2:PropertyList">
<xsl:param name="property-metadata" as="document-node()?" tunnel="yes"/>
<xsl:param name="object-metadata" as="document-node()?" tunnel="yes"/>

<xsl:variable name="definitions" as="document-node()">
<xsl:document>
<dl class="dl-horizontal">
<xsl:apply-templates select="*" mode="#current">
<xsl:sort select="if ($property-metadata) then ac:property-label(., $property-metadata) else ac:property-label(.)" order="ascending" lang="{$ldt:lang}"/>
<xsl:sort select="if (exists((text(), @rdf:resource, @rdf:nodeID))) then (if ($object-metadata) then ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1], $object-metadata) else ac:object-label((text(), @rdf:resource, @rdf:nodeID)[1])) else ()" order="ascending" lang="{$ldt:lang}"/>
</xsl:apply-templates>
</dl>
</xsl:document>
</xsl:variable>

<xsl:apply-templates select="$definitions" mode="bs2:PropertyListIdentity"/>
</xsl:template>

<!-- IMAGE -->

<!-- TO-DO: move down to Web-Client -->
Expand Down
Loading
Loading