我正在尝试这个项目,我有一个Oracle数据库,我在其中将XML和XSD存储在不同的表中。两个表都有一个包含文档的xmltype列(我使用的是带有XML DB的Oracle 11g xe)。
这个想法是有一个函数可以根据函数中的一个模式验证一个XML,并根据验证结果返回true或false,但我不知道如何处理这个问题。
我在http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb08tra.htm#i1026778做了一些研究但没有取得多大成功,因为所有的解释都假设架构在本地文件系统中,而不是在我的数据库中的表中。此外,在解释XMLIsValid函数时,他们谈论的是XML实例,我不确定我理解它们的意思或者如何理解它(我刚刚开始学习PL SQL和我&m; m根本没有信心使用它。)
目前,W3schools的XML和模式都是非常简单的例子,因为文档的内容现在对我来说并不像找到如何使验证工作那么重要。
有谁能告诉我如何做到这一点的例子?此外,任何线索或线索都会对我有帮助。
答案 0 :(得分:0)
您可以使用以下示例:
您需要注册架构。
您需要同时获取文件和架构。
使用xmlisvalid作为检查有效性的函数
DECALRE
registered_ NUMBER;
data_ CLOB;
schema_ CLOB;
xml_ XMLTYPE;
valid_ NUMBER;
CURSOR get_schema_ IS
SELECT content
FROM schema_table_
WHERE file_name = 'schema_name_';
CURSOR get_file_ IS
SELECT content
FROM file_table_
WHERE file_name = 'file_name_';
CURSOR check_register IS
SELECT COUNT(schema_url)
FROM user_xml_schemas
WHERE schema_url = 'file_name_';
BEGIN
OPEN get_data;
FETCH get_data INTO schema_;
CLOSE get_data;
OPEN check_register;
FETCH check_register INTO registered_;
CLOSE check_register;
IF registered_ = 0 THEN
DBMS_XMLSCHEMA.registerSchema(schemaurl => file_name_,
schemadoc => schema_,
local => TRUE,
gentypes => FALSE,
gentables => FALSE,
enablehierarchy =>
DBMS_XMLSCHEMA.enable_hierarchy_none);
END IF;
OPEN get_file_ ;
FETCH get_file_ INTO data_;
CLOSE get_file_ ;
xml_ := xmltype(data_, file_name_);
SELECT XMLISVALID(xmltype(data_), file_name_) AS is_valid
INTO valid_
FROM dual;
IF valid_ = 0 THEN
dbms_output.put_line('In Valid');
ELSE
dbms_output.put_line('Valid');
END IF;
END;