Announcement

Collapse
No announcement yet.

Objecte ausgeben die eine ID, IDREFS Beziehung haben.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Objecte ausgeben die eine ID, IDREFS Beziehung haben.

    Hallo,
    Ich habe Serien mit einem id Attribut vom Typ XSD:ID und Personen mit ein idref Attribut vom Typ XSD:IDREFS

    Ich habe mit folgendem xsl geschafft die passenden Personen zu den Serien auszugeben.

    xsl Auszug:
    Code:
    <xsl:key name="PersonByIDREF" match="Person" use="@idref" />
    
    <xsl:template match="Serie">
       <xsl:apply-templates select="key('PersonByIDREF',@id)" />
    </xsl:template>
    Das Problem:

    Ich würde gerne Pesonen mehreren Serien zu Ordnen. Also wenn ich ich...

    xml Auszug:
    Code:
    <Person idref="Serie1 Serie2">
            <Name>Meyer</Name>
        </Person>
    .. angebe, was ja mit IDREFS möglich ist, soll die Person in Serie1 und Serie2 auftauchen. Leider taucht sie in Serie2 nicht nur nicht auf, sondern verschwindet auch in Serie1 so bald man Serie2 an gibt.



    Es ist quasi ähnlich diesem Problem, nur das ich mit IDREFS die Person mehreren Serien zuordnen will. Link



    Ich kann schwer einschätzen ob es verständlich ist. Falls ich mich zu schlecht ausgedrückt habe meldet euch dann versuch ich es anders zu erklären.

    Gruß,

    exception
    Zuletzt editiert von Exception; 01.06.2010, 20:46.

  • #2
    Bemutzt du XSLT 1.0 oder 2.0? Wenn es 2.0 ist, benutzt du ein Schema und einen XSLT-Prozessor, der "schema aware" XSLT unterstützt?
    Mit XSLT 2.0 könntest du den key folgendermassen definieren:
    Code:
    <xsl:key name="PersonByIDREF" match="Person" use="tokenize(@idref, '\s+')" />
    Zuletzt editiert von Martin Honnen; 02.06.2010, 12:57. Reason: Beispiel

    Comment


    • #3
      Hi,
      im prinzip ist mir egal was ich nutze. Ich weiss auch nicht so recht wie ich das heraus finde. Bin noch neu in diesem Thema. Erstellt habe ich das File mit Oxygen. Die xml habe ich mir im Firefox anzeigen lassen.
      Ich habe allerdings versucht das mit der idref() Funktion zu lösen und da meinte Firefoy das er die xPath Erweiterungsfunktion nicht kennt. Egal ob ich im xsl version=1.0 oder version=2.0 angegeben habe.
      Mit id() kam die Meldung zwar nicht aber es funktionierte auch nicht.

      Ich versuch Deine Lösung mal umzusetzen. Vielleicht könntest du tokensize mal erklären. Kenne den befehl nicht.

      Comment


      • #4
        Keiner der Browser wie Firefox, IE, Opera, Safari unterstützt XSLT 2.0.
        Oxygen sollte XSLT 2.0 aber mit Hilfe von Saxon 9 unterstützen.
        tokenize ist eine in XPath 2.0 definierte Funktion: http://www.w3.org/TR/xpath-functions/#func-tokenize

        Comment


        • #5
          Ok, das ist schlecht. Brauch das im Rahmen einer Hausarbeit und ich gehe mal davon aus das sie sich das im Browser anschauen wird. Wenn es dann nicht funktioniert wäre das doof.

          Noch eine andere Idee wie man eine mehrfachbeziehung realisieren könnte?

          Comment


          • #6
            Ist das Schema vorgegeben? Wenn du statt eines Attributes mit einer Liste von referenzierten IDs jedem "Person"-Element ein Kindelement "idrefs" mit Kindelementen "id" gibts, also im Beispiel
            Code:
            <Person>
              <idrefs>
                <id>Serie1</id>
                <id>Serie2</id>
              </idrefs>
            </Person>
            dann kann man den key wie folgt definieren:
            Code:
            <xsl:key name="k1" match="Person" use="idrefs/id"/>
            und dann kann man auch mit XSLT 1.0 per key('k1', 'Serie1') die "Person"-Elemente finden, die "Serie1" referenzieren.

            Comment


            • #7
              Perfekt!

              Vielen, vielen Dank. Funktioniert wunderbar.

              Ich habe mich tot gesucht und würde wahrscheinlich immer noch suchen bevor ich gemerkt hätte, dass es daran liegen könnte, dass die Browser es nicht unterstützen.

              Echt verwirrend das es so viel 2.0 Literatur gibt die vollkommen nutzlos ist.

              Comment


              • #8
                Originally posted by Exception View Post
                Echt verwirrend das es so viel 2.0 Literatur gibt die vollkommen nutzlos ist.
                Es ist eher so, dass es noch viel zu wenig 2.0-Literatur gibt. Aus Sicht der Browserhersteller spielt die Unterstützung der mehr als 3 Jahre alten XSLT/XPath 2.0-Standards doch offenbar überhaupt keine Rolle mehr. Der »Normalfall« bei der Verarbeitung von XML mit XSLT sind Anwendungen auf der Serverseite. Für mich ist die Browserunterstützung in diesen Dingen eher ein historischer Unfall aus der IE5-Zeit. Browser sollten aus meiner Sicht immer das bekommen, was sie am besten können: (X)HTML, CSS und JavaScript …

                Die 2.0-Versionen sind dennoch viel zu mächtig, um sie – oder auch nur die zugehörige Literatur – als nutzlos einzustufen, siehe z. B. xsl:result-document zur mehrfachen Ausgabe von Dokumenten (eingesetzt beim kürzlich realisierten Projekt »epubMinFlow« zur E-Book-Produktion).

                Comment


                • #9
                  Ok, mein Fehler. Ich überblicke das wohl noch nicht richtig. Aber danke fürs aufklären.

                  Comment

                  Working...
                  X