如何在Oracle中執行模式註冊和XML驗證?
問題陳述
您希望對儲存在資料庫中的XML資料強制執行XML模式有效性。
解決方案
Oracle 提供了 DBMS_XMLSCHEMA.REGISTERSCHEMA 函式來在 Oracle 資料庫中定義 XML 模式。為了驗證生成的 xml 資料,我們需要註冊模式。註冊模式時,格式必須與生成的 xml 格式匹配,或者根據您希望生成 xml 的方式註冊模式。
註冊提供了兩個關鍵功能。首先,它允許 Oracle 識別可以從中獲取模式的外部位置或多個位置。其次,也是最重要的一點,REGISTERSCHEMA 解析模式的語法正確性和完整性。
REGISTERSCHEMA 函式可以從多個位置獲取 XML 模式,例如作為 VARCHAR 提供的文字,以及來自 BFILE 或 URI 引用。
以下是執行 xml 模式驗證的步驟。
- 註冊模式
DECLARE l_schema CLOB; BEGIN l_schema := '<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- definition of simple elements --> <xs:element name="customer_id" type="xs:positiveInteger"/> <xs:element name="email" type="xs:string"/> <xs:element name="name" type="xs:string"/> <xs:element name="order_id" type="xs:positiveInteger"/> <xs:element name="status" type="xs:string"/> <!-- definition of complex elements --> <xs:element name="order"> <xs:complexType> <xs:sequence> <xs:element ref="order_id"/> <xs:element ref="status"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="customer"> <xs:complexType> <xs:sequence> <xs:element ref="customer_id"/> <xs:element ref="email"/> <xs:element ref="name"/> <xs:element ref="order" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>' --In SCHEMAURL , provide the schema name of your choice DBMS_XMLSCHEMA.REGISTERSCHEMA(SCHEMAURL => 'xml_schema_test.xsd', SCHEMADOC => l_schema, LOCAL => TRUE, GENTYPES => FALSE, GENTABLES => FALSE, ENABLEHIERARCHY => DBMS_XMLSCHEMA.ENABLE_HIERARCHY_NONE); END;
檢查模式是否已建立。
示例
SELECT schema_url FROM user_xml_schemas;
輸出
-- Output xmtest_schema.xsd
- 如果需要刪除模式,請參考以下程式碼
3) 如果需要刪除已建立的模式。
BEGIN DBMS_XMLSCHEMA.DELETESCHEMA( SCHEMAURL=> 'xml_schema_test.xsd', DELETE_OPTION => DBMS_XMLSCHEMA.DELETE_CASCADE_FORCE); END;
- 使用 XMLISVALID 函式驗證針對已建立模式的 xml。
**XMLISVALID:** XMLISVALID 檢查輸入 XMLType_instance 是否符合相關的 XML 模式。如果模式有效,則結果為 1,否則為 0。
示例
CREATE TABLE t1 ( xml XMLTYPE); INSERT INTO t1 VALUES ('<?xml version="1.0"?> <customer> <customer_id>134</customer_id> <email>taylor.cauchon@internalmail</email> <name>Taylor Cauchon</name> <order> <order_id>921</order_id> <status>COMPLETE</status> </order> <order> <order_id>485</order_id> <status>COMPLETE</status> </order> <order> <order_id>1528</order_id> <status>COMPLETE</status> </order> <order> <order_id>1672</order_id> <status>COMPLETE</status> </order> <order> <order_id>1319</order_id> <status>COMPLETE</status> </order> </customer> '); SELECT XMLISVALID(xml, 'my_schema.xsd') AS is_valid FROM t1;
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP