|
170 | 170 | <ccmm:original_repository> |
171 | 171 | <ccmm:iri> |
172 | 172 | <xsl:choose> |
| 173 | + <!-- |
| 174 | + XOAI carries the repository's own base URL; use it. Deriving it from |
| 175 | + the item URI only works for /handle/ style URLs and otherwise names the |
| 176 | + item itself as the repository. |
| 177 | + --> |
| 178 | + <xsl:when test="doc:metadata/doc:element[@name='repository']/doc:field[@name='url']"> |
| 179 | + <xsl:value-of select="normalize-space((doc:metadata/doc:element[@name='repository']/doc:field[@name='url'])[1])"/> |
| 180 | + </xsl:when> |
173 | 181 | <xsl:when test="doc:metadata/doc:element[@name='dc']/doc:element[@name='identifier']/doc:element[@name='uri']/doc:element/doc:field[@name='value']"> |
174 | 182 | <xsl:variable name="uri" select="(doc:metadata/doc:element[@name='dc']/doc:element[@name='identifier']/doc:element[@name='uri']/doc:element/doc:field[@name='value'])[1]"/> |
175 | 183 | <!-- |
|
288 | 296 | <!-- dc.title.alternative mapped to alternate_title --> |
289 | 297 | <xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='title']/doc:element[@name='alternative']/doc:element/doc:field[@name='value']"> |
290 | 298 | <ccmm:alternate_title> |
291 | | - <ccmm:title xml:lang="en"> |
292 | | - <xsl:value-of select="."/> |
293 | | - </ccmm:title> |
| 299 | + <ccmm:title><xsl:call-template name="XmlLangAttribute"/><xsl:value-of select="."/></ccmm:title> |
294 | 300 | </ccmm:alternate_title> |
295 | 301 | </xsl:for-each> |
296 | 302 | </xsl:template> |
|
385 | 391 | <!-- ============================================================ --> |
386 | 392 | <!-- time_reference (required, unbounded) --> |
387 | 393 | <!-- ============================================================ --> |
| 394 | + <!-- |
| 395 | + xml:lang for a text value, taken from the XOAI language wrapper that encloses it. |
| 396 | + XOAI nests every metadata value inside an element named after its language qualifier |
| 397 | + ("en_US", "cs_CZ", ... or "none" when the field has no language). Called with the |
| 398 | + doc:field as the context node. |
| 399 | + --> |
| 400 | + <xsl:template name="XmlLangAttribute"> |
| 401 | + <xsl:variable name="wrapper" select="string(../@name)"/> |
| 402 | + <xsl:attribute name="xml:lang"> |
| 403 | + <xsl:choose> |
| 404 | + <xsl:when test="matches($wrapper, '^[a-z]{2,3}(_[A-Za-z]{2,4})?$')"> |
| 405 | + <xsl:value-of select="substring-before(concat($wrapper, '_'), '_')"/> |
| 406 | + </xsl:when> |
| 407 | + <xsl:otherwise>en</xsl:otherwise> |
| 408 | + </xsl:choose> |
| 409 | + </xsl:attribute> |
| 410 | + </xsl:template> |
| 411 | + |
388 | 412 | <!-- |
389 | 413 | The temporal representation shared by the Issued and Created time references. |
390 | 414 | An approximate date wins over dc.date.issued; a range becomes a time_interval, |
|
665 | 689 | </xsl:choose> |
666 | 690 | </ccmm:license> |
667 | 691 | <xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='rights']/doc:element/doc:field[@name='value']"> |
668 | | - <ccmm:description xml:lang="en"><xsl:value-of select="."/></ccmm:description> |
| 692 | + <ccmm:description><xsl:call-template name="XmlLangAttribute"/><xsl:value-of select="."/></ccmm:description> |
669 | 693 | </xsl:for-each> |
670 | 694 | </ccmm:terms_of_use> |
671 | 695 | </xsl:template> |
|
677 | 701 | <!-- dc.subject --> |
678 | 702 | <xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='subject']/doc:element/doc:field[@name='value']"> |
679 | 703 | <ccmm:subject> |
680 | | - <ccmm:title xml:lang="en"><xsl:value-of select="."/></ccmm:title> |
| 704 | + <ccmm:title><xsl:call-template name="XmlLangAttribute"/><xsl:value-of select="."/></ccmm:title> |
681 | 705 | </ccmm:subject> |
682 | 706 | </xsl:for-each> |
683 | 707 | <!-- dc.subject.* (nested qualifiers) --> |
684 | 708 | <xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='subject']/doc:element/doc:element/doc:field[@name='value']"> |
685 | 709 | <ccmm:subject> |
686 | | - <ccmm:title xml:lang="en"><xsl:value-of select="."/></ccmm:title> |
| 710 | + <ccmm:title><xsl:call-template name="XmlLangAttribute"/><xsl:value-of select="."/></ccmm:title> |
687 | 711 | </ccmm:subject> |
688 | 712 | </xsl:for-each> |
689 | 713 | <!-- Fallback: if no subjects, provide a placeholder --> |
|
701 | 725 | <!-- dc.description (abstract) --> |
702 | 726 | <xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='description']/doc:element[@name='abstract']/doc:element/doc:field[@name='value']"> |
703 | 727 | <ccmm:description> |
704 | | - <ccmm:description_text xml:lang="en"><xsl:value-of select="."/></ccmm:description_text> |
| 728 | + <ccmm:description_text><xsl:call-template name="XmlLangAttribute"/><xsl:value-of select="."/></ccmm:description_text> |
705 | 729 | <ccmm:description_type> |
706 | 730 | <ccmm:iri>https://vocabs.ccmm.cz/registry/codelist/DescriptionType/Abstract</ccmm:iri> |
707 | 731 | <ccmm:label xml:lang="en">Abstract</ccmm:label> |
|
711 | 735 | <!-- dc.description (general, non-qualified) --> |
712 | 736 | <xsl:for-each select="doc:metadata/doc:element[@name='dc']/doc:element[@name='description']/doc:element/doc:field[@name='value']"> |
713 | 737 | <ccmm:description> |
714 | | - <ccmm:description_text xml:lang="en"><xsl:value-of select="."/></ccmm:description_text> |
| 738 | + <ccmm:description_text><xsl:call-template name="XmlLangAttribute"/><xsl:value-of select="."/></ccmm:description_text> |
715 | 739 | <ccmm:description_type> |
716 | 740 | <ccmm:iri>https://vocabs.ccmm.cz/registry/codelist/DescriptionType/Abstract</ccmm:iri> |
717 | 741 | <ccmm:label xml:lang="en">Abstract</ccmm:label> |
|
0 commit comments