使用PL SQL根据XSD验证XML
我正在尝试这个项目,我有一个Oracle数据库,在其中我将XML和XSD存储在单独的表中。这两个表都有一个包含文档的xmltype列(我正在使用Oracle11gXe和XMLDB) 其思想是让一个函数根据函数中的一个模式验证一个XML,并根据验证结果返回true或false,但我不知道如何实现这一点 我一直在做一些研究,但没有取得多大成功,因为所有的解释都假设模式位于本地文件系统中,而不是数据库中的表中。另外,在解释XMLIsValid函数时,他们谈到了一个XML实例,我不确定我是否理解他们的意思或如何实现它(我刚刚开始学习PL-SQL,我对使用它一点信心都没有) 目前,XML和模式都是来自W3schools的非常简单的示例,因为文档的内容对于我来说并不像了解如何进行验证那样重要使用PL SQL根据XSD验证XML,xml,oracle,validation,plsql,xsd,Xml,Oracle,Validation,Plsql,Xsd,我正在尝试这个项目,我有一个Oracle数据库,在其中我将XML和XSD存储在单独的表中。这两个表都有一个包含文档的xmltype列(我正在使用Oracle11gXe和XMLDB) 其思想是让一个函数根据函数中的一个模式验证一个XML,并根据验证结果返回true或false,但我不知道如何实现这一点 我一直在做一些研究,但没有取得多大成功,因为所有的解释都假设模式位于本地文件系统中,而不是数据库中的表中。另外,在解释XMLIsValid函数时,他们谈到了一个XML实例,我不确定我是否理解他们的意
有人能给我举个例子说明如何做到这一点吗?此外,任何线索都会对我有所帮助。您可以使用以下示例:
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;