XSLT 2.0 を使用して XML スキーマを変換しています。最初のスキーマ (s1.xsd) は、次のように 2 番目のスキーマ (s2.xsd) をインポートします。
s1.xsdの内容
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd"
xmlns:ns1="URI1" targetNamespace="URI2"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<import namespace="URI1" schemaLocation="s2.xsd"/>
<element name="element1"/>
<element name="element2"/>
</schema>
およびs2.xsdの内容
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:ns1="URI1" targetNamespace="URI1">
<attribute name="attr1"/>
<schema>
私の XSLT は、次のように XS 名前空間を宣言します。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
s2.xsd のノードを s1.xsd の <schema> 要素にマージしたいと考えています。これまでのところ、私は試しました
<xsl:template name="merge_imported_schemas">
<xsl:for-each select="/schema/import[@namespace = //namespace::*]">
<!-- file exists? -->
<xsl:choose>
<xsl:when test="boolean(document(@schemaLocation))">
<!-- schema found -->
<xsl:copy-of select="document(@schemaLocation)/*/node()"/>
</xsl:when>
<xsl:otherwise>
<!-- schema not found -->
<xsl:message terminate="yes">
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
しかし、私は望ましい結果が得られません。誰かが私が間違っていることを教えてもらえますか? ここには名前空間の衝突があるのではないかと思いますが、正直なところ、名前空間の使用は少し混乱しています。ありがとう!