Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
inc-meta/mdx/uk/final_tweak.xsl
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
188 lines (158 sloc)
6.19 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<!-- | |
final_tweak.xsl | |
Final tweaks required for UK federation aggregates. | |
--> | |
<xsl:stylesheet version="1.0" | |
xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" | |
xmlns:mdrpi="urn:oasis:names:tc:SAML:metadata:rpi" | |
xmlns="urn:oasis:names:tc:SAML:2.0:metadata" | |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |
exclude-result-prefixes="md"> | |
<!--Force UTF-8 encoding for the output.--> | |
<xsl:output omit-xml-declaration="no" method="xml" encoding="UTF-8" indent="yes"/> | |
<!-- | |
extraText | |
This parameter, if present, provides additional text to be put in the | |
document comment. | |
--> | |
<xsl:param name="extraText"/> | |
<!-- | |
publisher | |
This parameter, if present, prompts the generation of a PublicationInfo | |
element on the EntitiesDescriptor. | |
--> | |
<xsl:param name="publisher"/> | |
<!-- | |
validityDays | |
This parameter determines the number of days between the aggregation instant and the | |
end of validity of the signed metadata. | |
--> | |
<xsl:param name="validityDays"/> | |
<!-- | |
now_ISO | |
This parameter is an ISO8601 representation of the UTC instant | |
at which the aggregate generation started. | |
Example: 2019-10-23T10:25:11Z | |
--> | |
<xsl:param name="now_ISO"/> | |
<!-- | |
now_local_ISO | |
This parameter is an ISO8601 representation of the local time | |
at which the aggregate generation started. | |
Example: 2019-10-23T11:25:11 | |
--> | |
<xsl:param name="now_local_ISO"/> | |
<!-- | |
validUntil_ISO | |
This parameter is an ISO8601 representation of the UTC instant | |
at which the aggregate will become invalid. This has been computed | |
by the caller as now_ISO + validityDays days. | |
--> | |
<xsl:param name="validUntil_ISO"/> | |
<!-- | |
Document element. | |
--> | |
<xsl:template match="/md:EntitiesDescriptor"> | |
<xsl:call-template name="document.comment"> | |
<xsl:with-param name="validUntil" select="$validUntil_ISO"/> | |
</xsl:call-template> | |
<EntitiesDescriptor> | |
<xsl:apply-templates select="@*"/> | |
<xsl:attribute name="validUntil"><xsl:value-of select="$validUntil_ISO"/></xsl:attribute> | |
<xsl:call-template name="document.comment"> | |
<xsl:with-param name="validUntil" select="$validUntil_ISO"/> | |
</xsl:call-template> | |
<!-- | |
Add an Extensions element if there isn't one, but we need one | |
so that we can put a PublicationInfo inside it. | |
--> | |
<xsl:if test="$publisher and not(md:Extensions)"> | |
<xsl:text> </xsl:text> | |
<xsl:text> </xsl:text> | |
<xsl:element name="md:Extensions"> | |
<xsl:call-template name="generate.publicationInfo"/> | |
<xsl:text> </xsl:text> | |
<xsl:text> </xsl:text> | |
</xsl:element> | |
<xsl:text> </xsl:text> | |
</xsl:if> | |
<xsl:apply-templates select="node()"/> | |
</EntitiesDescriptor> | |
</xsl:template> | |
<!-- | |
Comment to be added to the top of the document, and just inside the document element. | |
--> | |
<xsl:template name="document.comment"> | |
<xsl:param name="validUntil"/> | |
<xsl:text> </xsl:text> | |
<xsl:comment> | |
<xsl:text> 	U K F E D E R A T I O N M E T A D A T A </xsl:text> | |
<xsl:text> </xsl:text> | |
<xsl:if test="$extraText"> | |
<xsl:text>	*** </xsl:text> | |
<xsl:value-of select="$extraText"/> | |
<xsl:text> *** </xsl:text> | |
<xsl:text> </xsl:text> | |
</xsl:if> | |
<xsl:text>	Aggregate built </xsl:text> | |
<xsl:value-of select="$now_ISO"/> | |
<!-- | |
Show local time if DST is in effect (indicated by the local | |
hour and UTC hour being different), otherwise omit. | |
--> | |
<xsl:if test="substring($now_ISO, 12, 2) != substring($now_local_ISO, 12, 2)"> | |
<xsl:text> (</xsl:text> | |
<xsl:value-of select="$now_local_ISO"/> | |
<xsl:text> local)</xsl:text> | |
</xsl:if> | |
<xsl:text> </xsl:text> | |
<xsl:text> </xsl:text> | |
<xsl:text>	Aggregate valid for </xsl:text> | |
<xsl:value-of select="$validityDays"/> | |
<xsl:text> days, until </xsl:text> | |
<xsl:value-of select="$validUntil"/> | |
<xsl:text> </xsl:text> | |
</xsl:comment> | |
</xsl:template> | |
<!-- | |
Document element's Extensions. | |
Insert a PublicationInfo at the top, if required. | |
--> | |
<xsl:template match="/md:EntitiesDescriptor/md:Extensions"> | |
<xsl:copy> | |
<xsl:if test="$publisher"> | |
<xsl:call-template name="generate.publicationInfo"/> | |
</xsl:if> | |
<xsl:apply-templates select="node()"/> | |
</xsl:copy> | |
</xsl:template> | |
<!-- | |
PublicationInfo generation. | |
Assumption: called at the start of the document element's Extensions, at 4-space | |
indentation, so the element itself requires 8-space indentation. | |
--> | |
<xsl:template name="generate.publicationInfo"> | |
<xsl:text> </xsl:text> | |
<xsl:text> </xsl:text> | |
<xsl:element name="mdrpi:PublicationInfo"> | |
<xsl:attribute name="publisher"> | |
<xsl:value-of select="$publisher"/> | |
</xsl:attribute> | |
<xsl:attribute name="creationInstant"> | |
<xsl:value-of select="$now_ISO"/> | |
</xsl:attribute> | |
</xsl:element> | |
</xsl:template> | |
<!--By default, copy text blocks, comments and attributes unchanged.--> | |
<xsl:template match="text()|comment()|@*"> | |
<xsl:copy/> | |
</xsl:template> | |
<!--By default, copy all elements from the input to the output, along with their attributes and contents.--> | |
<xsl:template match="*"> | |
<xsl:copy> | |
<xsl:apply-templates select="node()|@*"/> | |
</xsl:copy> | |
</xsl:template> | |
</xsl:stylesheet> |