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之类的东西,不是吗? 亲切的问候 多米尼克     
已邀请:
我尚未使用此功能,但是根据“定义键及其参考”,建议使用
key
keyref
而非
IDREF
。   为了确保零件数量元素具有相应的零件描述,我们说这些元素(
<selector xpath=\"r:regions/r:zip/r:part\"/>
)的
number
属性(
<field xpath=\"@number\"/>
)必须引用
pNumKey
键。将
number
声明为
keyref
并不意味着其值必须是唯一的,而是意味着必须存在一个具有相同值的
pNumKey
。     

要回复问题请先登录注册