MudGuard: Funktion zum Testen, ob id in idrefs ist, gesucht

Beitrag lesen

Hi,

Hallom Andreas,

Für andere Elemente (namens participant) benutze ich ein Attribut vom Typ IDREFS, das dann eine Liste von id-Werten enthält.

Ein als IDREFS deklariertes Attribut muss eine duch _Leerzeichen_ getrennte Liste von IDs enthalten. So ist dein events-Attribute kein gültiger IDREFS Typ.

Ups, keine DTD ==> keine Validierung.
Frag mich nicht, wo ich das mit den Kommata herhab.
Wird umgehend korrigiert.

Hehe - brauch ich gar nicht - ist mir nur hier im Beispiel-XML passiert.

Bei der XSL-Transformation will ich jetzt zu einem der Elemente mit IDREFS-Attribut alle referenzierten Elemente auflisten.
3 Fragen dazu:
1.) geht das auch ohne Variable eventids?
Ja, aber nur wenn du auch eine DTD hast wo zumindest das Attribut id als Typ ID deklariert ist (events muss du dann nicht unbedingt als Typ IDREFS deklarieren).
Dann geht es z.B. so:
<xsl:template match="participant">
   <xsl:apply-templates select="id(@events)" />
</xsl:template>

Ok, habs grad mal so ohne DTD ausprobiert, da wird nix selektiert. Werd ich halt noch ne DTD aufsetzen - hat ja auch noch andere Vorteile (Validierbarkeit)

Wenn ich <xsl:apply-templates select="//event[contains(./@eventrefs, @id)]"/> schreibe, bezieht sich das ./eventrefs doch auf das event, nicht auf den participant - oder täusche ich mich da?
Ja, Bezug wird hier auf das <event>-Element selbst genommen.

Ok, mit der id()-Konstruktion ist das ja eh ganz weg.

2.) Gibt es eine fertige Funktion, die mir die Anzahl der ids in einem idref liefert?
Ja. id() behandelt eine durch Leerzeichen getrennte Liste von IDs auf einmal. Also sie findet Knoten deren ID in der Liste vorkommt.

ok, darauf dann count() angewendet, sollte das gewünschte liefern.

3.) die wichtigste Frage: im Moment hab ich das so gelöst, daß die id-Werte mit einem Buchstaben beginnen und mit einer festen Anzahl von Ziffern aufhören.
Aber: gibt es eine Funktion, die mir für beliebige id-Werte und ein idref-Attribut true oder false zurückliefert, je nachdem, ob die id nicht nur im Sinne der String-contains, sondern als echte ID im idrefs steckt?
Siehe oben.
Voraussetzung ist aber wirkich, dass dein XML valide ist (sprich DTD!)

Ok - ich hab's verstanden.

Falls das eine Rolle spielt: ich verwende msxml 4.0 SDK und das msxsl-Commandline-Tool (gibt es was besseres nicht-Java-basiertes? Java braucht bei mir immer viel zu lange, um die VM zu starten)

Vielleicht http://www.elcel.com/products/xmlvalid.html oder http://xml.apache.org/xerces-c/index.html
sonst http://www.xmlsoftware.com/parsers.html

Werd ich mir mal angucken.

Ein dickes Danke mal wieder an Dich!

cu,
Andreas

--
MudGuard? Siehe http://www.Mud-Guard.de/
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.