3 Stimmen

Verwendung von ID/IDREFS in XML-Schema

Wie sollte ich ID/IDREFS in XMLSchema verwenden, um es für XSL-Transformationen mit xsl:key und den xpath-Funktionen key() und id() zu nutzen?

Wenn ich die folgende DTD verwende, ist alles in Ordnung

<!ELEMENT role EMPTY>
<!ATTLIST role
   name   ID    #REQUIRED>
<!ELEMENT usecases (usecase)+>
<!ELEMENT usecase EMPTY>
<!ATTLIST usecase
   roles IDREFS  #REQUIRED
   name   CDATA   #REQUIRED>

Ich kann den xsl:key definieren und die XPath-Funktionen key() und id() erfolgreich verwenden

<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>

Wenn ich aber meine DTD in XMLSchema migriere, erzeugt die gleiche XSL-Transformation nur ein leeres Dokument.

<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>

Oder ist dieser ganze Ansatz mit der Verwendung von ID/IDREFS falsch und ich muss ihn auf XML-Schlüssel umstellen? Aber das ist eine große Umstellung, weil es solche Dinge wie XML-Keyrefs nicht gibt, oder?

Mit freundlichen Grüßen Dominik

2voto

Eugene Yokota Punkte 92703

Ich habe diese Funktion noch nicht genutzt, aber laut Definieren von Schlüsseln und deren Referenzen , mit key y keyref scheint der empfohlene Ansatz zu sein IDREF .

Um sicherzustellen, dass die Teilmengenelemente entsprechende Teilbeschreibungen haben, sagen wir, dass die number Attribut ( <field xpath="@number"/> ) dieser Elemente ( <selector xpath="r:regions/r:zip/r:part"/> ) muss auf die pNumKey Taste. Diese Erklärung von number als keyref bedeutet nicht, dass sein Wert eindeutig sein muss, aber es bedeutet, dass es eine pNumKey mit demselben Wert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X