View stylesheet

XML schema http://bd.eionet.europa.eu/schemas/Art12Art17_reporting_2013/art12_birds.xsd
Output type RDF
Description RDF output
XSL file birds-rdf.xsl (Last modified: 17 Jan 2014 09:26 )
<?xml version="1.0" encoding="UTF-8"?>
 <!-- $Id: birds-rdf.xsl 15535 2014-01-17 09:20:43Z lainekai $ -->

<!DOCTYPE xsl:stylesheet [
 <!ENTITY countries "http://rdfdata.eionet.europa.eu/eea/countries/">
 <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">
 <!ENTITY dquality "http://dd.eionet.europa.eu/vocabulary/art12_2012/data_quality/">
 <!ENTITY location "http://dd.eionet.europa.eu/vocabulary/art12_2012/location/">
 <!ENTITY pnumber "http://dd.eionet.europa.eu/vocabulary/art12_2012/population_number/">
 <!ENTITY trend "http://dd.eionet.europa.eu/vocabulary/art12_2012/trend_birds/">
 <!ENTITY season "http://dd.eionet.europa.eu/vocabulary/art12_2012/season/">
 <!ENTITY estimate "http://dd.eionet.europa.eu/vocabulary/art12_2012/type_of_estimate/">
 <!ENTITY plans "http://dd.eionet.europa.eu/vocabulary/art12_2012/type_of_plans/">

 <!ENTITY umethod "http://dd.eionet.europa.eu/vocabulary/art17_2012/methods_used/">
 <!ENTITY measures "http://dd.eionet.europa.eu/vocabulary/art17_2012/measures/">
 ]>

<xsl:stylesheet version="1.0" 
			xmlns="http://rdfdata.eionet.europa.eu/article12/ontology/"
			xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
			xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
			xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
			xmlns:l="http://biodiversity.eionet.europa.eu/art17dataflow">
	<xsl:output method="xml" indent="yes"/>
	<xsl:template match="bird_reports">
		<rdf:RDF>
			<xsl:apply-templates/>
		</rdf:RDF>
	</xsl:template>
	<xsl:template match="bird_report">
		<BirdReport rdf:about="">
			<xsl:attribute name="rdf:about">#<xsl:value-of select="concat(speciescode, '-', season)"/></xsl:attribute>
            <rdfs:label>Birds Directive Art. 12 report on  <xsl:value-of select="concat(speciesname,  ' - ', season/@desc)"/> in <xsl:value-of select="country/@desc"/></rdfs:label>
			<forCountry>
				<xsl:attribute name="rdf:resource">&countries;<xsl:value-of select="country/@isocode"/></xsl:attribute>
			</forCountry>
			<memberstate>
				<xsl:value-of select="country/@desc"/>
			</memberstate>
			<xsl:call-template name="get-eunis-species-code"/>
			
			<xsl:apply-templates/>
		</BirdReport>
	</xsl:template>
	
	<!-- Country reference -->
    <xsl:template match="country">
        <xsl:element name="{local-name()}">
            <xsl:attribute name="rdf:resource">&countries;<xsl:value-of select="@isocode"/></xsl:attribute>
        </xsl:element>
    </xsl:template>
	
	<!-- Boolean properties -->
    <xsl:template match="sensitive_species|distribution_map|additional_distribution_map|range_map|          type_legal|type_administrative|type_contractual|type_recurrent|type_oneoff|          location_inside|location_outside|location_both|sensitive_species|          broad_evaluation_maintain|broad_evaluation_enhance|broad_evaluation_longterm|          broad_evaluation_noeffect|broad_evaluation_unknown|broad_evaluation_notevaluated">
        <xsl:element name="{local-name()}">
            <xsl:attribute name="rdf:datatype">&xsd;boolean</xsl:attribute>
        <xsl:value-of select="."/></xsl:element>
    </xsl:template>
	
    <!-- Method used -->
    <xsl:template match="population_method|population_trend_method|population_trend_long_method|   range_method|range_trend_method|range_trend_long_method|spa_population_method">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:element name="{local-name()}">
                <xsl:attribute name="rdf:resource">&umethod;<xsl:value-of select="normalize-space(text())"/></xsl:attribute>
            </xsl:element>
        </xsl:if>
    </xsl:template>

    <!-- Trend -->
    <xsl:template match="population_trend|population_trend_long|range_trend|range_trend_long|spa_population_trend">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:element name="{local-name()}">
                <xsl:choose>
                    <xsl:when test="normalize-space(text()) = '+'">
                        <xsl:attribute name="rdf:resource">&trend;i</xsl:attribute>
                    </xsl:when>
                    <xsl:when test="normalize-space(text()) = '-'">
                        <xsl:attribute name="rdf:resource">&trend;d</xsl:attribute>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:attribute name="rdf:resource">&trend;<xsl:value-of select="text()"/></xsl:attribute>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:element>
        </xsl:if>
    </xsl:template>
	
	<!-- population size unit -->
	<xsl:template match="population_size_unit">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:element name="{local-name()}">
                <xsl:attribute name="rdf:resource">&pnumber;<xsl:value-of select="normalize-space(text())"/></xsl:attribute>
            </xsl:element>
        </xsl:if>
    </xsl:template>
	
	<!-- type of estimate -->
	<xsl:template match="population_type_of_estimate">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:element name="{local-name()}">
                <xsl:attribute name="rdf:resource">&estimate;<xsl:value-of select="normalize-space(text())"/></xsl:attribute>
            </xsl:element>
        </xsl:if>
    </xsl:template>

	<!-- Quality -->
	<xsl:template match="population_quality|population_trend_quality|population_trend_long_quality|   range_qualityrange_trend_quality|range_trend_long_quality">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:element name="{local-name()}">
                <xsl:attribute name="rdf:resource">&dquality;<xsl:value-of select="normalize-space(text())"/></xsl:attribute>
            </xsl:element>
        </xsl:if>
    </xsl:template>

	<!-- season  -->
	<xsl:template match="season">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:element name="{local-name()}">
                <xsl:attribute name="rdf:resource">&season;<xsl:value-of select="normalize-space(text())"/></xsl:attribute>
            </xsl:element>
        </xsl:if>
    </xsl:template>
	
	<!-- plan -->
	<xsl:template match="plan">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:element name="{local-name()}">
                <xsl:attribute name="rdf:resource">&plans;<xsl:value-of select="normalize-space(text())"/></xsl:attribute>
            </xsl:element>
        </xsl:if>
    </xsl:template>
    <xsl:template match="ranking">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:call-template name="one-resource-predicate">
                <xsl:with-param name="text" select="text()"/>
                <xsl:with-param name="table" select="local-name(.)"/>
                <xsl:with-param name="predicate" select="local-name(.)"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>

	<xsl:template match="pressures_threats|measures">
		<xsl:apply-templates/>
	</xsl:template>
	
    <xsl:template match="pressure_threat">
        <xsl:element name="{local-name()}">
            <xsl:attribute name="rdf:parseType">Resource</xsl:attribute>
            <rdfs:label><xsl:value-of select="code/@desc"/></rdfs:label>
            <xsl:call-template name="one-resource-predicate">
                <xsl:with-param name="text" select="code"/>
                <xsl:with-param name="table" select="'threats'"/>
                <xsl:with-param name="predicate" select="'forPressureThreat'"/>
            </xsl:call-template>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
	
    <xsl:template match="measure">
        <measure>
            <xsl:attribute name="rdf:parseType">Resource</xsl:attribute>
            <rdfs:label><xsl:value-of select="code/@desc"/></rdfs:label>
            <xsl:call-template name="one-resource-predicate">
                <xsl:with-param name="text" select="code"/>
                <xsl:with-param name="table" select="local-name(parent::*)"/>
                <xsl:with-param name="predicate" select="'forMeasure'"/>
            </xsl:call-template>
            <xsl:apply-templates/>
        </measure>
    </xsl:template>

	<xsl:template name="one-resource-predicate">
        <xsl:param name="text"/>
        <xsl:param name="predicate"/>
        <xsl:param name="table"/>
        <xsl:if test="string-length($text) != 0">
            <xsl:element name="{$predicate}">
                <xsl:attribute name="rdf:resource">http://dd.eionet.europa.eu/vocabulary/art17_2012/<xsl:value-of
                        select="$table" />/<xsl:value-of select="$text"/></xsl:attribute>
            </xsl:element>
        </xsl:if>
    </xsl:template>
	
    <xsl:template name="one-literal-predicate">
        <xsl:param name="text"/>
        <xsl:param name="predicate"/>
        <xsl:element name="{$predicate}">
            <xsl:value-of select="$text"/>
        </xsl:element>
    </xsl:template>
	
    <xsl:template match="text()"/>
	
	<xsl:template name="get-eunis-species-code">
		<xsl:param name="speciesname" select="speciescode/@desc"/>
		<xsl:if test="speciescode/@euniscode!=''">
			<forSpecies>
				<xsl:attribute name="rdf:resource">http://eunis.eea.europa.eu/species/<xsl:value-of select="speciescode/@euniscode"/>
				</xsl:attribute>
			</forSpecies>
		</xsl:if>
		<xsl:if test="speciescode/@euniscode='' ">
			<xsl:if test="document('http://converters.eionet.europa.eu/xmlfile/map-eunis-species.xml')/l:eunis/l:species[@name=$speciesname] != ''">
				<forSpecies>
					<xsl:attribute name="rdf:resource">http://eunis.eea.europa.eu/species/<xsl:value-of select="document('http://converters.eionet.europa.eu/xmlfile/map-eunis-species.xml')/l:eunis/l:species[@name=$speciesname]"/>
					</xsl:attribute>
				</forSpecies>
			</xsl:if>
		</xsl:if>
	</xsl:template>
	<xsl:template match="*">
        <xsl:if test="normalize-space(text()) != ''">
            <xsl:element name="{local-name()}"><xsl:value-of select="."/></xsl:element>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>