2014-02-18 2 views
2

Oracle 11g PL/SQL 언어로 XML을 생성하는 법을 배우고 있습니다.주어진 XSD를 참조하여 ORACLE 11g에서 XML을 생성하는 방법은 무엇입니까?

db 테이블에서 가져온 데이터에 따라 XML을 생성하고 싶지만, 동시에 구조를 따라야하고 제공되는 XSD를 참조하여 XML의 유효성을 검사해야합니다.

dbms_xmlschema.registerSchema을 통해 XSD 스키마를 등록하고 동적 스크립트를 사용하여 dbms_xmlquery.getXml을 통해 XML을 생성 한 다음 XMLTYPE.schemaValidate을 사용하여 유효성을 검사했습니다.

그러나 내 프로세스에서 흐름은 XML을 먼저 작성한 다음 XSD로 유효성을 검사하므로 올바른 구조를 얻지 못할 수 있으며 XML을 생성하는 동안 구조에 대한 작업이 필요합니다.

저장 한 XSD를 참조하여 XML을 생성 할 수있는 방법이 있습니까? 참조 구조의 결과가 유효하면 구조체를 놓치지 않고 XML 만 생성됩니다.

+0

Oracle의 XML 및 XML 스키마는 중요한 주제입니다. [Oracle XML DB Dev Guide] (http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb05sto.htm)를 살펴보십시오. – tbone

답변

0

스키마를 기반으로 XML을 생성 할 수는 없습니다. 아마도 xml을 xmltype 변수에 생성 한 다음이 스키마에 대해 유효성을 검사하는 것이 가장 좋습니다.

다음 plsql 블록 (스크립트로 실행)을 시작점으로 사용할 수 있습니다. XML 함수 (XMLFOREST, XMLELEMENT, XMLATTRIBUTES)를 사용하여 xmltype 변수를 생성하도록 쿼리를 변경하십시오.

일단이 l_xml 안에 있으면 스키마에 대해 유효성을 검사 할 수 있어야합니다. (그렇다면 필요하면 xml을 필요로하거나 계속 처리하고 오류를보고합니다.)

내 샘플은 xml을 출력하고 dbms 출력에 넣습니다.

set serveroutput on; 
declare 
    l_error varchar2(4094); 
    -- 
    l_xml xmltype; 
    l_tmp varchar2(4096); 
begin 
    dbms_output.put_line('Start'); 

    --generate variable from query 
    select xmlelement("this:root" 
     ,xmlattributes(
     'http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi", 
     'http://ic.ac.uk.relationshipvisualiser.app.data.InputData' as "xmlns:this" 
    ) 
     ,xmlelement("this:subelement" 
     ,'subelementValue' 
    ) 
     ,xmlelement("this:subelement2" 
     ,'subelementValue2' 
    ) 
    ) 
    into l_xml 
    from dual; 

    --todo Write code to validate l_xml against xsd schema 

    --now output xml 
    select XMLSERIALIZE(Document l_xml as CLOB INDENT SIZE = 2) 
    into l_tmp 
    from dual; 
    dbms_output.put_line(l_tmp); 


    dbms_output.put_line('End'); 
EXCEPTION WHEN OTHERS THEN 
    l_error := NVL(SUBSTR(SQLERRM,0,990),'NULL'); 
    dbms_output.put_line(l_error || ':-' || NVL(SUBSTR(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE,0,3000),'NULL')); 
end; 
관련 문제