relpipe-data/examples/relpipe-in-sparql.xsl
branchv_0
changeset 310 aeda3cb4528d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/relpipe-data/examples/relpipe-in-sparql.xsl	Mon Jul 27 17:51:53 2020 +0200
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Relational pipes
+Copyright © 2020 František Kučera (Frantovo.cz, GlobalCode.info)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, version 3 of the License.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+-->
+<xsl:stylesheet version="1.0"
+				xmlns="tag:globalcode.info,2018:relpipe"
+				xmlns:sparql="http://www.w3.org/2005/sparql-results#"
+				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+				xmlns:fn="http://www.w3.org/2005/xpath-functions"
+				xmlns:xs="http://www.w3.org/2001/XMLSchema"
+				exclude-result-prefixes="fn sparql xs">
+	<xsl:output
+		method="xml"
+		indent="yes"
+		encoding="UTF-8"/>
+
+	<xsl:param name="relation" select="'rdf'"/>
+
+	<xsl:template match="/sparql:sparql">
+		<relpipe>
+			<relation>
+				<name>
+					<xsl:value-of select="$relation"/>
+				</name>
+				<attributes-metadata>
+					<xsl:for-each select="sparql:head/sparql:variable">
+						<attribute-metadata name="{@name}" type="string"/>
+						<!-- here we can optionally append additional attributes with some metadata -->
+					</xsl:for-each>
+				</attributes-metadata>
+				
+				<xsl:for-each select="sparql:results/sparql:result">
+					<xsl:variable name="record" select="."/>
+					<record>
+						<xsl:for-each select="/sparql:sparql/sparql:head/sparql:variable">
+							<xsl:variable name="attribute" select="@name"/>
+							<xsl:call-template name="record">
+								<xsl:with-param name="record" select="$record"/>
+								<xsl:with-param name="attribute" select="$attribute"/>
+							</xsl:call-template>
+						</xsl:for-each>
+					</record>
+				</xsl:for-each>
+				
+			</relation>
+		</relpipe>
+	</xsl:template>
+	
+	<xsl:template name="record">
+		<xsl:param name="record"/>
+		<xsl:param name="attribute"/>
+		<attribute>
+			<xsl:value-of select="$record/sparql:binding[@name=$attribute]"/>
+			<!-- here we can optionally append additional attributes with some metadata -->
+			<!--
+				<sparql:binding name="…attribute…">
+					<sparql:uri>…value…</sparql:uri>
+					<sparql:literal xml:lang="it">…value…</sparql:literal>
+				</sparql:binding>
+			-->
+		</attribute>
+	</xsl:template>
+
+</xsl:stylesheet>