Announcement

Collapse
No announcement yet.

owl/rdf auslesen

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

  • owl/rdf auslesen

    Hallo zusammen. Ich habe gerade erst vor einer Woche angefangen mich mit xslt zu befasssen und stehe momentan vor folgendem Problem:


    Bei dem Code:

    Code:
      
    <MStream rdf:about="#Inst_MStream">
            <rdf:type rdf:resource="&owl;Thing"/>
            <hasAttribute rdf:resource="#MassFlowRate"/>
    </MStream>
    kann ich hasAttribute oder MStream leider nicht aufrufen

    Code:
    <xsl:value-of select=".//hasAttribute/@node()"></xsl:value-of>
    aber

    Code:
    <xsl:value-of select=".//rdf:type/@node()"></xsl:value-of>
    klappt !

    Vielen dank für Tipps!

  • #2
    Die abzufragenden Elemente liegen vermutlich im Default-Namensraum (beim Wurzelelement deklariert). Gib diesen ebenfalls im XSLT-Stylesheet an. Das Thema gab es hier bereits mehrfach.

    Comment


    • #3
      ok, wie sieht die dekleration im stylesheet aus?

      danke!

      Comment


      • #4
        Die Deklaration hängt vom nicht angegebenen Namensraum ab. Eine simple Forumssuche nach "xslt namespace" ergibt weitere Hinweise zu ähnlichen Problemen: Ergebnis 1 | Ergebnis 2 | ...

        Comment


        • #5
          Finde leider meinen Fehler nicht....

          hier meine Stylsheet:

          Code:
          <?xml version="1.0" encoding="UTF-8"?>
          
          <xsl:stylesheet version="2.0" 
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
          xmlns:xs="http://www.w3.org/2001/XMLSchema" 
          xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:owl="http://www.w3.org/2002/07/owl#" 
          xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns="namespaceURI" 
          xpath-default-namespace="http://www.w3.org/2001/XMLSchema">

          Wie schon beschrieben

          Code:
          <xsl:for-each select=".//Attribute">
          <xsl:variable name="name">
          <xsl:value-of select="name()"></xsl:value-of>
          </xsl:variable>
          <xsl:variable name="name2">
          <xsl:value-of select="./child::rdf:type/@node()"></xsl:value-of>
          </xsl:variable>
          </xsl:for-each>
          klappt nicht!

          Code:
          <xsl:for-each select=".//owl:Thing">
          <xsl:variable name="name">
          <xsl:value-of select="name()"></xsl:value-of>
          </xsl:variable>
          <xsl:variable name="name2">
          <xsl:value-of select="./child::rdf:type/@node()"></xsl:value-of>
          </xsl:variable>
          </xsl:for-each>
          klappt!

          wobei der Quellcode folgender ist:


          Code:
              <owl:Thing rdf:about="#W">
                  <rdf:type rdf:resource="#SI_DerivedUnit"/>
              </owl:Thing>
              
          
              <Attribute rdf:about="#Work">
                  <rdf:type rdf:resource="&owl;Thing"/>
                  <hasUnit rdf:resource="#W"/>
              </Attribute>
          </rdf:RDF>



          Viele Dank noch mal!

          Comment


          • #6
            Gib mal das Testdokument genauer an, also speziell das komplette Starttag <rdf:RDF ...> bzgl. </rdf:RDF>. Dort liegt das Namensraumproblem.

            Comment


            • #7
              Ok das Testdokument:

              Code:
              <rdf:RDF xmlns="http://www.semanticweb.org/ontologies/2010/0/OntologyTest.owl#"
                   xml:base="http://www.semanticweb.org/ontologies/2010/0/OntologyTest.owl"
                   xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#"
                   xmlns:OntologyTest="http://www.semanticweb.org/ontologies/2010/0/OntologyTest.owl#"
                   xmlns:Kg="&OntologyTest;Kg/"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
                   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
                   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                   xmlns:owl="http://www.w3.org/2002/07/owl#">
                  <owl:Ontology rdf:about=""/>

              Comment


              • #8
                Der Default-Namespace ist falsch angegeben (siehe xmlns="..."). Richtig ist (bricht hier um):
                Code:
                xpath-default-namespace="http://www.semanticweb.org/ontologies/2010/0
                /OntologyTest.owl#"
                Dann klappt z. B. diese Abfrage problemlos mit dem Ergebnis: #Work:
                Code:
                <xsl:template match="//Attribute">
                  <xsl:value-of select="@rdf:about"/>
                </xsl:template>

                Comment


                • #9
                  Hallo!

                  Ich habe ein ähnliches Problem: Ich möchte allerdings einen Parser schreiben, der aus xml --> owl Dateien erzeugen könnte.

                  Meine Frage bezieht sich nur auf den Kopf des Parsers: Was schreibe ich darein, damit die ganzen namespace Angaben nicht als Attribute in jedem Element erscheinen, das ich erzeuge?

                  Ich habe vorsichtshalber alles reinkopiert, was da oben stand...

                  Bsp.:
                  Code:
                  <xsl:stylesheet version = '2.0' 
                  xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns="namespaceURI" xmlns:noprefixe="http://www.xfa.org/schema/xfa-template/2.5/" exclude-result-prefixes="noprefixe" xml:base="http://www.semanticweb.org/ontologies/2010/0/OntologyVTPALN.owl" xmlns:owl2xml="http://www.w3.org/2006/12/owl2-xml#"  xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
                  <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
                  
                  	<xsl:template match="/">
                  		<xsl:element name="owl:Thing">
                  			<tata>tata</tata>
                  		</xsl:element>
                  	</xsl:template>
                  </xsl:stylesheet>

                  Wird das ausgeführt, stehen im Namespaces meiner Elemente einige der xmlns Angaben drin. Wie vermeide ich das? Ich dachte "noprefix" macht das schon?

                  Vielen Dank!

                  Comment


                  • #10
                    Verwende exclude-result-prefixes="prefix1 prefix2 ..." beim xsl:stylesheet-Element.

                    Comment

                    Working...
                    X