我应该如何在 XMLSchema 中使用 ID/IDREFS 以便使用 xsl:key 和 xpath 函数 key() 和 id() 进行 XSL 转换?
如果我使用以下 DTD 一切都很好
<!ELEMENT role EMPTY>
<!ATTLIST role
name ID #REQUIRED>
<!ELEMENT usecases (usecase)+>
<!ELEMENT usecase EMPTY>
<!ATTLIST usecase
roles IDREFS #REQUIRED
name CDATA #REQUIRED>
我可以定义 xsl:key 并成功使用 key() 和 id() XPath 函数
<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>
但是如果我将我的 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 Key ?但迁移量很大,因为没有像 XML keyrefs 这样的东西,不是吗?
亲切的问候多米尼克