La validation des fichiers XML à l'encontre de schéma Oracle PL/SQL
J'ai une obligation de valider un fichier entrant à l'encontre d'un XSD. Les deux seront sur le système de fichiers du serveur.
J'ai regardé dbms_xmlschema
, mais ont eu des problèmes à la faire fonctionner.
Pourrait-il être plus facile à faire avec un peu de Java?
Quelle est la classe la plus simple que je pourrais mettre dans la base de données?
Voici un exemple simple:
DECLARE
v_schema_url VARCHAR2(200) := 'http://www.example.com/schema.xsd';
v_blob bLOB;
v_clob CLOB;
v_xml XMLTYPE;
BEGIN
begin
dbms_xmlschema.deleteschema(v_schema_url);
exception
when others then
null;
end;
dbms_xmlschema.registerSchema(schemaURL => v_schema_url,
schemaDoc => '
<xs:schema targetNamespace="http://www.example.com"
xmlns:ns="http://www.example.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.0">
<xs:element name="something" type="xs:string"/>
</xs:schema>',
local => TRUE);
v_xml := XMLTYPE.createxml('<something xmlns="http://www.xx.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/schema.xsd">
data
</something>');
IF v_xml.isschemavalid(v_schema_url) = 1 THEN
dbms_output.put_line('valid');
ELSE
dbms_output.put_line('not valid');
END IF;
END;
Cela génère l'erreur suivante:
ORA-01031: insufficient privileges
ORA-06512: at "XDB.DBMS_XDBZ0", line 275
ORA-06512: at "XDB.DBMS_XDBZ", line 7
ORA-06512: at line 1
ORA-06512: at "XDB.DBMS_XMLSCHEMA_INT", line 3
ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 14
ORA-06512: at line 12
OriginalL'auteur steevc | 2008-09-17
Vous devez vous connecter pour publier un commentaire.
Mise à jour
Schéma XML de l'enregistrement nécessite des privilèges suivants:
Pour une raison quelconque, il n'est pas suffisant si ces privilèges sont accordés indirectement par l'intermédiaire de rôles, mais les privilèges besoin être accordé directement à de schéma/utilisateur.
Réponse Originale À Cette Question
J'ai aussi remarqué que les valeurs par défaut des paramètres
gentables
etgentypes
éleverinsufficient privileges
exception. Probablement que je suis juste en manque de certains privilèges pour utiliser ces fonctions, mais pour le moment je n'ai pas une bonne compréhension de ce qu'ils font. Je suis juste heureux de les désactiver et de validation semble bien fonctionner.Je suis en cours d'exécution sur la Base de données Oracle 11g Release 11.2.0.1.0
gentypes => true, gentables => true
gentypes => false, gentables => true
gentypes => true, gentables => false
gentypes => false, gentables => false
OriginalL'auteur user272735
Vous devez avoir
ALTER SESSION
privilège accordé pour enregistrer un schéma.OriginalL'auteur Tomasz Żuk
voici un morceau de code qui fonctionne pour moi.
user272735 la réponse est juste, j'ai écrit une autre réponse aussi loin que je peux pas écrire tout le code dans un commentaire (trop long).
OriginalL'auteur Pierre-Gilles Levallois
Une fois que vous obtenez après l'installation des questions, il y a des difficultés dans certaines versions d'Oracle lorsque les schémas obtenir de gros, en particulier lorsque vous avez des schémas qui incluent d'autres schémas. Je sais que nous avons eu ce problème dans la version 9.2, ce n'est pas sûr 10.2 ou 11.
Pour les petits schémas comme votre exemple, si, il devrait fonctionner.
OriginalL'auteur Jim Hudson
De l'inscription de l'XSD conduit à la création de tables, des types et des déclencheurs. Par conséquent, vous devez les subventions suivantes:
OriginalL'auteur Robin
Si je me souviens bien, que le message d'erreur est émis lorsque XDB (Oracle XML de package de Base de données) n'est pas correctement installé. Ont l'administrateur de vérifier cela.
OriginalL'auteur Adam Hawkes