xsl:keyおよびxpath関数key()およびid()を使用したXSL変換にXMLSchema内でID/IDREFSを使用する方法を教えてください。XMLスキーマでのID/IDREFSの使用
私は、次のDTDを使用している場合は、すべての罰金
<!ELEMENT role EMPTY>
<!ATTLIST role
name ID #REQUIRED>
<!ELEMENT usecases (usecase)+>
<!ELEMENT usecase EMPTY>
<!ATTLIST usecase
roles IDREFS #REQUIRED
name CDATA #REQUIRED>
である私は、XSL定義することができます:キーをし、正常に
<xsl:key name="usecase2role" match="usecase" use="id(@roles)/@name" />
<xsl:template match="role">
<xsl:apply-templates select="key('usecase2role', @name)" mode="byrole">
<xsl:with-param name="roleName" select="@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="usecase" mode="byrole">
<xsl:param name="roleName"/>
insert into permission(roleId, usecaseId) values (<xsl:value-of select="$roleName"/>, <xsl:value-of select="@name"/>);
</xsl:template>
キー()とid()XPath関数を使用しかし、私は移行した場合私のDTDをXMLSchemaに変換すると、同じXSL変換で空のドキュメントだけが生成されます。
<xsd:complexType name="role">
<xsd:attribute name="name" type="xsd:ID" use="required"/>
</xsd:complexType>
<xsd:complexType name="usecase">
<xsd:attribute name="name" use="required"/>
<xsd:attribute name="roles" use="required" type="xsd:IDREFS"/>
</xsd:complexType>
ID/IDREFSの使い方が間違っていて、XMLキーに変更する必要がありますか?しかし、それはXMLの主義のようなものがないので、多くの移行はありますか?
種類が ドミニク
質問サンプルでは、あなたのスキーマに 'usecases'要素の定義がないのはなぜですか? –