XML模式中ID / IDREFS的使用
|
如何在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之类的东西,不是吗?
亲切的问候
多米尼克
没有找到相关结果
已邀请:
1 个回复
丧泉缝锋
和
而非
。 为了确保零件数量元素具有相应的零件描述,我们说这些元素(
)的
属性(
)必须引用
键。将
声明为
并不意味着其值必须是唯一的,而是意味着必须存在一个具有相同值的
。