Stefan: XML registrieren

Hallo,

ich möchte ein XML-Schema in der Datenbank registrieren, aber das will irgendwie nicht.

BEGIN
  DBMS_XMLSCHEMA.registerSchema(
    'http://www.meineurl.de/html/schema1.xsd',
    XDBURIType('c:/import/schema1.xsd').getClob(),
    TRUE,
    TRUE,
    FALSE,
    TRUE);
END;
/

Fehlermeldung ist diese hier:
Invalid resource handle or path name "c:/import/schema1.xsd"

Die Pfadangabe ist der Pfad auf dem Server. In der Datenbank ist das Directory mit dem Namen XML erstellt worden. Wenn ich XML/schema1.xsd probiere komme ich leider auch nicht zum Erfolg.

Weiß jemand was ich falsch mache? Wie kann ich später Dateien gegen dieses Schema validieren? Geht das direkt aus dem Directory oder aus einer xmltype table?

Danke!
Stefan

  1. Hallo!

    Entweder,

    Hallo,

    ich möchte ein XML-Schema in der Datenbank registrieren, aber das will irgendwie nicht.

    BEGIN
      DBMS_XMLSCHEMA.registerSchema(
        'http://www.meineurl.de/html/schema1.xsd',
        XDBURIType('c:/import/schema1.xsd').getClob(),

    Du schaffst erstmal die XDB-Resource wie z.B. hier beschieben - Du brauchst eine ORACLE-URI und KEINEN OS-Pfad(!) -

    Oder Du legst die XSD in irgendein Webserver (z.B: IIS) Verzeichnis und verwendest HTTPURIType(http://...),

    Fehlermeldung ist diese hier:
    Invalid resource handle or path name "c:/import/schema1.xsd"

    denn sonst hat Oracle recht! ;)

    Die Pfadangabe ist der Pfad auf dem Server.

    Und da liegt imo das Problem, s.o.

    Grüsse

    Solkar

    1. Hi,

      danke, hilft schon mal sehr. Aber wie ist das mit der URL? Muss das schema auch online stehen oder geht auch lokal? Wenn lokal, muss dann ein Webserver laufen oder wie kann ich das einfach mit einer lokalen Angabe machen? Warum gib es eigentlich noch die URL-Angabe, wenn es XDBURIType gibt?

      Danke!!

      Stefan

      1. Hi,

        danke, hilft schon mal sehr. Aber wie ist das mit der URL? Muss das schema auch online stehen oder geht auch lokal?

        Lass uns das Problem mal zergliedern:

        Wenn Du

        A) mit Werkzeug X/Sprache VALIEDIREN willst, musu das Schema "irgendwo" liegen. Sei es lokal, auf einem Webserver, z.H. internen des Orakels.

        B) Tabellen erzeugen und Daten einfügen willst ;-)
        muss der INHALT des Schemas einmal in dieser Form

        DBMS_XMLSCHEMA.registerSchema(  
            'http://localhost:8080/public/baz.xsd',  
        --  
        --    Choose ONE!  
        --  
        --    1) Anderer Webserver:  
        --    HTTPURIType('http://localhost:101010/baz.xsd').getClob(),  
        --  
        --    2) z.B. CREATE DIRECTORY TMPDIR AS 'C:\Temp'  
        --    bfilename('TMPDIR','baz.xsd'),  
        --  
        --    3) CREATE DIRECTORY UND DBMS_XDB.CREATERESOURCE(...)  
        --    XDBURIType('/public/baz.xsd').getClob(),  
        --    ,  
            TRUE,  
            TRUE,  
            FALSE,  
            TRUE  
        );  
        
        

        vom Orakel vernascht worden sein.

        Ob's den XSD-CLOB per HTTP, Resource_Handle, oder schnöder BFILE kriegt ist hierzu erstmal egal; Oracle kann nun mit sowas wie   'http://localhost:424242/public/baz.xsd' etwas anfangen um Namespaces und Schemata zu lokalisieren.

        Diese - ggf. url - URL sollte dann in XML-Daten beim INSERT in die XMLTYPE TABLE stehen:

        <irgednwas xmlns:xdb="http://xmlns.oracle.com/xdb"  
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
              xsi:noNamespaceSchemaLocation="http://foo.bar:424242/baz.xsd">  
        <!--  
            GANZ GANZ viele Daten...  
        -->  
        </irgendwas>  
        

        Wenn lokal, muss dann ein Webserver laufen oder wie kann ich das einfach mit einer lokalen Angabe machen? Warum gib es eigentlich noch die URL-Angabe, wenn es XDBURIType gibt?

        Mir drängt sich eher die Frage auf, was die ganze "XML-Tabellen-Magie" eigentlich bewirken soll.

        XML aus relationalen Daten zu ERZEUGEN geht mit einer Query oder Client-seitig.

        XML in relationale Strukturen zu IMPORTIEREN geht mittels spezieller VIEWS ggf im Verbund mit Triggern und /oder SP.
        Oder manuell per SP.
        Oder Client-seitig.
        ...

        Grüsse

        Solkar

        1. Streiche:
          DBMS_XMLSCHEMA.registerSchema(
              'http://localhost:8080/public/baz.xsd',

          Setze:
          DBMS_XMLSCHEMA.registerSchema(
              'http://localhost:424242/public/baz.xsd',

          1. Hi,

            super, danke! Funktioniert.

            Jetzt versuche ich ein XML-File welches in einer xmltype Tabelle gespeichert ist, zu validieren. Leider macht auch das wieder Probleme. Mein Ansatz ist:

            select x.xmldoc.isSchemaValid('public/schema1.xsd', 'LS') from xml_documents x
            /

            "ORA-22806 not an object or REF" wird mir als Fehlermeldung angezeigt.

            Die Tabelle und der Spaltenname sind aber da in der Datenbank. Was mache ich falsch?

            Gruß
            Stefan

            1. ...erzählen mir wie es in Deiner DB ausschaut.

              Hast Du jetzt das Beispiel aus meinem ersten Link mal Schritt für Schritt durchgearbeitet, also angepasst und laufenlassen?

              Was ist Dir dabei aufgefallen?

              Gab's da vielleicht eine Fehlermeldung?

              Hi,

              super, danke! Funktioniert.

              Jetzt versuche ich ein XML-File welches in einer xmltype Tabelle gespeichert ist, zu validieren. Leider macht auch das wieder Probleme. Mein Ansatz ist:

              select x.xmldoc.isSchemaValid('public/schema1.xsd', 'LS') from xml_documents x
              /

              "ORA-22806 not an object or REF" wird mir als Fehlermeldung angezeigt.

              In den Nebeln meiner Glaskugel lese ich, dass die Ressource nicht angelegt wurde...

              Die Tabelle und der Spaltenname sind aber da in der Datenbank. Was mache ich falsch?

              Gruß
              Stefan

              Grüsse

              Solkar

              P.S.: So könntest Du einen Log erstellen

              type <Irgendwas>.sql | sqlplus <USER>/<PASSWORD>@<SID> >mylog.log

              1. Hi,

                ja, habe das ausprobiert und das Schema registrieren hat auch funktioniert. Die XML-Datei ist auch in der Datenbank, nur das validieren klappt nicht, wie ich in meiner Nachricht zuvor erwähnt habe.

                Gruss
                Andy

                1. Hi,

                  ja, habe das ausprobiert und das Schema registrieren hat auch funktioniert.

                  Entweder Du beantwortest meine Rückfragen genau,

                  wie ich in meiner Nachricht zuvor erwähnt habe.

                  und zwar bitte ohne solche Plattitüden, oder wir lassen das insgesamt.

                  Drei Dinge zur Erinnerung

                  • Es ist DEIN Problem
                  • Zumindest die englischsprachige Oracle - Doku ist sehr ausführlich und es gibt Suchmaschinen
                  • Oracle bietet kommerziellen Support; da würdest Du sicherlich gut beraten werden.

                  Alles klar?

                  Grüsse

                  Solkar