Announcement

Collapse
No announcement yet.

Namespace mit XSLT auf verschiedene Art anpassen

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

  • Namespace mit XSLT auf verschiedene Art anpassen

    Hallo Ihr,

    ich bin neu hier im Foum und habe ein paar Fragen zur Bearbeitung/Veränderung von Namespaces via XSLT. Da ich gerade als HiWi bei uns im Institut ein paar XSL Transformationen schreiben soll bin ich mit meinem jetztigen Wissen von XSLT stark an meine Grenzen gestoßen. Und zwar geht es um folgendes.

    Wir bekommen für ein Projekt immer wieder XML Dateien zur Verarbeitung geliefert, die aber leider nicht einem bestimmten Schema entsprechen. Für die weitere Verarbeitung ist das aber wichtig. Leider habe ich keinen Einfluss auf die Erstellung der XML Dokumente, weswegen ich jetzt eine XSLT schreiben soll, die uns die Dokumente korrigiert. Nach vielen Versuchen habe ich leider noch keinen Erfolge gehabt und vielleicht wisst ihr da weiter. Zumindest habe ich schon so manches interessante aus diesem Forum herausgelesen.

    Es geht darum, dass in dem gegebenen XML Dokument verschiedene Namespaces definiert sind, die je nachdem auf verschiedene Weise umgebaut werden sollen. Z.B.:

    Aus
    Code:
    xmlns:oxml="http://schema.ontoprise.com/oxml/core/2.1#"
    soll werden
    Code:
    xmlns:oxml="http://schema.ontoprise.com/oxml/core/2.1"
    Aus
    Code:
    xsi:schemaLocation="http://schema.ontoprise.com/oxml/core/2.1# oxml2.1.xsd"
    soll werden
    Code:
    xsi:schemaLocation="http://schema.ontoprise.com/oxml/core/2.1  oxml2.1.xsd"
    Aus
    Code:
    xmlns:a="http://www.xpress-project.eu#" id="a:Onto_R-Q"
    soll werden
    Code:
    id="http://www.xpress-project.eu#Onto_R-Q"
    Ein gekürztes Beispiel mit diesen Fällen sieht ungefähr so aus:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    
    <oxml:ontology 
    	xmlns="http://www.xpress-project.eu#" 
    	xmlns:a="http://www.xpress-project.eu#" 
    	xmlns:kaon2="http://kaon2.semanticweb.org/internal#" 
    	xmlns:owl="http://www.w3.org/2002/07/owl#" 
    	xmlns:owlx="http://www.w3.org/2003/05/owl-xml#" 
    	xmlns:oxml="http://schema.ontoprise.com/oxml/core/2.1#" 
    	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    	xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    	xmlns:ruleml="http://www.w3.org/2003/11/ruleml#" 
    	xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
    	xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" 
    	xmlns:swrlx="http://www.w3.org/2003/11/swrlx#" 
    	xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://schema.ontoprise.com/oxml/core/2.1# oxml2.1.xsd" 
    	id="a:Onto_R-Q">
    		INHALTSELEMENTE
    </oxml:ontology>
    Hat jemand von euch dazu vielleicht ein paar Hinweise wie ich das umsetzen könnte? Leider bin ich bis jetzt auch bei englischer Literatur auf kein praktikables Ergebnis gekommen was mir auch nur einen Ansatz geliefert hätte.

    Vielen Dank schon einmal im Voraus!

    Florian Freitag

  • #2
    Die xmlns-Deklarationen sind keine Attribute im XPath-Datenmodell, lediglich die Attribute id und xsi:schemaLocation lassen sich über die attribute::Achse abfragen. Insofern erscheint mir die Verwendung eines Identitäts-Templates und das Neubauen des Wurzelelements mit den gewünschten Deklarationen am sinnvollsten:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:oxml="http://schema.ontoprise.com/oxml/core/2.1#">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
      <xsl:template match="node() | @*">
        <xsl:copy>
          <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>  
      </xsl:template>
    
      <xsl:template match="oxml:ontology">
        <oxml:ontology xmlns="http://www.xpress-project.eu#" 
          xmlns:kaon2="http://kaon2.semanticweb.org/internal#" 
          xmlns:owl="http://www.w3.org/2002/07/owl#" 
          xmlns:owlx="http://www.w3.org/2003/05/owl-xml#" 
          xmlns:oxml="http://schema.ontoprise.com/oxml/core/2.1" 
          xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
          xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
          xmlns:ruleml="http://www.w3.org/2003/11/ruleml#" 
          xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
          xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" 
          xmlns:swrlx="http://www.w3.org/2003/11/swrlx#" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="http://schema.ontoprise.com/oxml/core/2.1 oxml2.1.xsd"
          id="http://www.xpress-project.eu#Onto_R-Q">
          <xsl:apply-templates select="node()"/>
        </oxml:ontology>  
      </xsl:template>
    
    </xsl:stylesheet>
    Evtl. bei xsl:stylesheet noch exclude-result-prefixes verwenden.

    Comment


    • #3
      Vielen Dank für deine Mühe und deine Antwort!!

      Also ich habe jetzt mal mich noch weiter eingearbeitet und mich tiefer mit der Materie beschäftigt, doch wenn ich das richtig sehe, so bliebt mir als einzigste Möglichkeit jeweils das Wurzelelement neu aufzubauen mit den korrekten Namespaces. Offensichtlich gibt es auch keine Möglichkeit die Namespaces annähernd wie Attribute zu behandeln oder? Einzig ich habe mal eine Möglichkeit gefunden mit for-each die Namespaces durchzulaufen. Hat aber leider irgendwie nicht richtig funktioniert.

      Das Problem ist nämlich dass diese Namespace-Transformationen nicht irgendwo spezielles an einer bestimmten Stelle vorgenommen werden sollen, sondern irgendwo im XML Dokument. Und Sinn und Zweck dieser XSL Transformation sollte sein, dass diese falschen Formatierungen automatisch korrigiert werden.

      Jetzt könnte man natürlich auf die Idee kommen einfach für jeden dieser Knoten so eine Regel zu erstellen. Das halte ich aber irgendwie für ungeschickt.

      Gibt es da noch irgendwelche Lösungen?

      Viele Grüße,

      Florian Freitag

      Comment

      Working...
      X