一部のEAD(エンコードされたアーカイブの説明)XMLドキュメントでXSLT2.0ID変換を実行しています。出力を少し変更する必要がありますが、名前空間の問題が発生しているようです。
スキーマ対応プロセッサでこれをテストしないでください。エラーが発生します。:)
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="2.0">
<xsl:output method="xml" indent="yes" standalone="no"/>
<!-- The identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="filedesc">
<xsl:copy>
<header>Subjects</header>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
サンプル-EAD.xml(ここのpastebinでも利用可能:http://pastebin.com/RFAQaY3w)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ead xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd" xmlns:ns2="http://www.w3.org/1999/xlink" xmlns="urn:isbn:1-931666-22-9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511" countryencoding="iso3166-1" dateencoding="iso8601" langencoding="iso639-2b">
<eadid>01234</eadid>
<filedesc>
<AAA>1</AAA>
<BBB>2</BBB>
</filedesc>
</eadheader>
<archdesc>
<bib>
<CCC>1</CCC>
<DDD>2</DDD>
</bib>
</archdesc>
</ead>
要素から名前空間情報を引き出すと(http://pastebin.com/6ygi3xUmでも入手可能)、変更を加えたID変換が機能します。
サンプル-EAD-2:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ead>
<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511" countryencoding="iso3166-1" dateencoding="iso8601" langencoding="iso639-2b">
<eadid>01234</eadid>
<filedesc>
<AAA>1</AAA>
<BBB>2</BBB>
</filedesc>
</eadheader>
<archdesc>
<bib>
<CCC>1</CCC>
<DDD>2</DDD>
</bib>
</archdesc>
名前空間はあまり得意ではないので、アドバイスをいただければ幸いです。XSLTに名前空間を追加しようとすると、変換は機能しますが、新しい要素で名前空間属性を取得します。読んでくれてありがとう!乾杯!
編集:入力(名前空間付き)、ID変換結果の実行-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead xmlns:ns2="http://www.w3.org/1999/xlink" xmlns="urn:isbn:1-931666-22-9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd">
<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511"
countryencoding="iso3166-1"
dateencoding="iso8601"
langencoding="iso639-2b">
<eadid>01234</eadid>
<filedesc>
<AAA>1</AAA>
<BBB>2</BBB>
</filedesc>
</eadheader>
<archdesc>
<bib>
<CCC>1</CCC>
<DDD>2</DDD>
</bib>
</archdesc>
</ead>
入力(名前空間なし)はID変換結果を実行します-
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead>
<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511"
countryencoding="iso3166-1"
dateencoding="iso8601"
langencoding="iso639-2b">
<eadid>01234</eadid>
<filedesc>
<header>Subjects</header>
<AAA>1</AAA>
<BBB>2</BBB>
</filedesc>
</eadheader>
<archdesc>
<bib>
<CCC>1</CCC>
<DDD>2</DDD>
</bib>
</archdesc>
そして最後に、入力(名前空間付き)はXSLT(名前空間が追加された)の結果を実行します-
XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="2.0"
xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd"
xmlns:ns2="http://www.w3.org/1999/xlink"
xmlns="urn:isbn:1-931666-22-9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes" standalone="no"/>
<!-- The identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="filedesc">
<xsl:copy>
<header>Subjects</header>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
結果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead xmlns:ns2="http://www.w3.org/1999/xlink" xmlns="urn:isbn:1-931666-22-9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd">
<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511"
countryencoding="iso3166-1"
dateencoding="iso8601"
langencoding="iso639-2b">
<eadid>01234</eadid>
<filedesc>
<AAA>1</AAA>
<BBB>2</BBB>
</filedesc>
</eadheader>
<archdesc>
<bib>
<CCC>1</CCC>
<DDD>2</DDD>
</bib>
</archdesc>
</ead>
編集#2:申し訳ありませんが、希望する出力を表現できなかったと思います。ID変換後に追加の処理が行われるため、変更された要素に属性を追加することは避けたいと思います。また、XMLを現在の状態にできるだけ近づけたいと思います(編集を除く)。ご理解とご協力をよろしくお願いいたします。次に例を示します。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd" xmlns:ns2="http://www.w3.org/1999/xlink" xmlns="urn:isbn:1-931666-22-9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511" countryencoding="iso3166-1" dateencoding="iso8601" langencoding="iso639-2b">
<eadid>01234</eadid>
<filedesc>
<header>List Name</header>
<AAA>1</AAA>
<BBB>2</BBB>
</filedesc>
</eadheader>
<archdesc>
<bib>
<CCC>1</CCC>
<DDD>2</DDD>
</bib>
</archdesc>
</ead>