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