3

xsl:key および xpath 関数 key() および id() を使用した XSL 変換に使用するには、XMLSchema 内で 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: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 keyref のようなものがないので、それは多くの移行ですよね?

よろしく ドミニク

4

1 に答える 1

2

私はまだこの機能を使用していませんが、Defining Keys & their Referenceskeyによると、との使用 keyrefが よりも推奨されるアプローチのようIDREFです。

part-quantity 要素に対応する部品の説明があることを確認するには、これらの要素 ( )のnumber属性 ( ) がキーを参照する必要があると言います。を a として宣言することは、その値が一意でなければならないという意味ではありませんが、同じ値を持つ a が存在しなければならないことを意味します。<field xpath="@number"/><selector xpath="r:regions/r:zip/r:part"/>pNumKeynumberkeyrefpNumKey

于 2011-06-29T03:55:35.633 に答える