ある XSD を、フォーマットがわずかに異なる別の XSD に変換する XSL があります。(基本的に対象ファイルは正規化されます)。ターゲットのその他の大きな違いは、デフォルトの名前空間とターゲットの名前空間が追加されていることです。名前空間を実際に取得するのに問題があります。これが私の XSL のスニペットです。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8"/>
<xsl:variable name="Unions" select="'Yes'"/>
<xsl:variable name="myname" select="//Table/Name"/>
<xsl:variable name="namespace" select="concat('http://mynamespace/', $myname)"/>
<xsl:template match="/">
<xsl:element name="xsd:schema" namespace="http://www.w3.org/2001/XMLSchema" xmlns="$namespace"
<xsl:attribute name="targetNamespace">
<xsl:value-of select="$namespace"/>
</xsl:attribute>
<xsl:attribute name="elementFormDefault">qualified</xsl:attribute>
<xsl:attribute name="attributeFormDefault">unqualified</xsl:attribute>
...
</xsl:element>
</xsl:template>
</xsl:stylesheet>
そして、これは私が得ているものです:
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema targetNamespace="http://mynamespace/somename" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
...
</xsd:schema>
そして、すべての子ノードに xmlns="$namespace" がタグ付けされます。私は XSLT の完全な専門家ではありません。BizTalk マップがすべてを生成するため、自分で開発する必要はありませんでしたが、この XSL は、BizTalk マップで処理できるよりも複雑でした。
ああ、私は XSLT 1.0 に制限されています