Oracle XDK
Oracle XML Developer’s Kit(XDK)는 Java, JavaBeans, C, C++, PL/SQL에 대해 사용할 수 있으며 XML 구문 분석기, XSL 프로세서, XML 클래스 생성기, XML Transviewer Beans, XML 스키마 프로세서가 포함되어 있습니다.
XML 구문 분석기
오라클은 Java, C, C++, PL/SQL용 XML 구문 분석기를 제공합니다. 각 구문 분석기는 XML 문서(또는 독립형 DTD)를 애플리케이션에서 처리할 수 있도록 구문 분석하는 독립적인 XML 구성 요소입니다. 이 구문 분석기는 DOM(Document Object Model) 및 SAX(Simple API for XML) 인터페이스, XML name space, 확인 및 미확인 모드, XSL 변환을 지원하며, 모든 오라클 플랫폼에서 사용 가능합니다.
XSL 변환 지원
버전 2부터 XML 구문 분석기에 XSL 스타일시트를 사용하여 XML 데이타를 변환하기 위한 통합 XSL 변환(XSLT) 프로세서가 포함되었습니다. XSLT 프로세서를 사용하면 XML 문서를 XML에서 XML, HTML 또는 다른 텍스트 기반 형식으로 변환할 수 있습니다.
Name Space 지원
Java, C, C++ 구문 분석기는 또한 XML 이름 공간을 지원합니다. name space는 XML 문서의 요소 형식(태그) 또는 속성 사이에 이름 충돌을 해결하거나 방지하는 메커니즘입니다. 이 메커니즘은 포함된 문서의 범위를 확장하는 "범용" name space 요소 형식과 속성 이름을 제공합니다. 이러한 태그는 <oracle:EMP xmlns:oracle="http://www.oracle.com/xml"/> 등과 같은 URI로 지정됩니다. 예를 들어, name space를 사용하면 오라클 <EMP> 데이타 요소와 다른 업체의 <EMP> 데이타 요소 정의와 분명하게 식별할 수 있습니다. 따라서 애플리케이션이 처리할 요소와 속성을 식별할 수 있습니다. Java, C, C++ 구문 분석기는 지정되지 않은 "로컬" 요소 형식과 속성 이름은 물론 범용 요소 형식과 속성 이름을 인식하고 구문 분석하는 방식으로 name space를 지원합니다.
확인 및 미확인 모드 지원
Java, C, C++ 구문 분석기는 확인 모드나 미확인 모드에서 XML을 구문 분석할 수 있습니다. 미확인 모드에서 구문 분석기는 XML이 올바로 구성되었는지 확인하고 DOM API로 조작할 수 있는 객체 트리로 데이타를 구문 분석합니다. 또한 확인 모드에서 구문 분석기는 XML이 올바로 구성되었는지 확인하고 DTD에 대해 XML 데이타를 확인합니다. 이러한 확인에는 속성 이름과 요소 태그가 합법적인지, 중첩된 요소가 포함되었는지 등에 대한 검사가 포함됩니다.
DOM 및 SAX API에 대해
XML API는 대개 2가지 범주, 즉 이벤트 기반 및 트리 기반으로 구분됩니다. 이벤트 기반API(SAX 등)는 콜백을 사용하여 구문 분석 이벤트를 애플리케이션에 보고합니다. 애플리케이션은 사용자 정의 이벤트 처리기를 통해 이 이벤트를 처리합니다. 이벤트에는 요소의 시작 및 끝과 문자가 포함됩니다. 트리 기반 API와 달리 이벤트 기반 API는 대개 XML 문서의 내부 메모리 트리 프레젠테이션을 작성하지 않습니다. 따라서 SAX는 검색 기능과 같이 XML 트리를 조작할 필요가 없는 애플리케이션의 경우에 특히 유용합니다. 트리 기반 API(DOM 등)는 XML 문서의 내부 메모리 트리 프레젠테이션을 작성하고, 애플리케이션이 트리를 탐색하고 처리할 수 있는 클래스와 메소드를 제공합니다. 일반적으로 DOM 인터페이스는 요소 순서 재지정, 요소와 속성 추가 또는 삭제, 요소 이름 변경 등과 같이 XML 트리의 구조를 조작하는 경우에 가장 유용합니다. Oracle9i XDK는 DOM 2.0 및 SAX 2.0 사양을 모두 지원합니다.
다음 그림은 XML 문서와 해당 SAX 및 DOM 프레젠테이션을 보여줍니다.
XML 문서 | SAX 이벤트 | DOM 트리 | ||
|
|
|
예제: Java XML 구문 분석기
다음 Java 코드는 Java v2용 XML 구문 분석기를 사용하여 XML 문서를 구문 분석한 다음, DOM API를 사용하여 XML 데이타를 조작하고, 마지막으로 XSLT Processor API를 사용하여 데이타를 변환합니다.
import org.w3c.dom.*; import java.util.*; import java.io.*; import java.net.*; import oracle.xml.parser.v2.*; public class XSLTransform { public static void main (String args[]) throws Exception { DOMParser parser; XMLDocument xml, xsldoc, out; URL xslURL; URL xmlURL; try { if (args.length != 2) { // Pass in the names of the XSL and XML files System.err.println("Usage: java XSLTransform xslfile xmlfile"); System.exit(1); } // Parse XSL and XML documents parser = new DOMParser(); parser.setPreserveWhitespace(true); xslURL = createURL(args[0]); parser.parse(xslURL); xsldoc = parser.getDocument(); xmlURL = createURL(args[1]); parser.parse(xmlURL); xml = parser.getDocument(); // Instantiate the stylesheet XSLStylesheet xsl = new XSLStylesheet(xsldoc, xslURL); XSLProcessor processor = new XSLProcessor(); // Display any warnings that may occur processor.showWarnings(true); processor.setErrorStream(System.err); // Process XSL DocumentFragment result = processor.processXSL(xsl, xml); // Create an output document to hold the result out = new XMLDocument(); // Create a dummy document element for the output document Element root = out.createElement("root"); out.appendChild(root); // Append the transformed tree to the dummy document element root.appendChild(result); // Print the transformed document out.print(System.out); } catch (Exception e) { e.printStackTrace(); } } }Java용 XML 클래스 생성기
Java용 XML 클래스 생성기는 XML DTD 또는 XML 스키마로부터 Java 소스 파일을 생성합니다. 이 기능은 애플리케이션이 적합한 DTD나 스키마 또는 구성할 웹 양식의 백엔드 및 XML 문서를 기반으로 하는 다른 애플리케이션으로 XML 메시지를 보낼 때 유용합니다. 이 클래스를 사용하면 Java 애플리케이션이 입력 DTD나 스키마를 따르는 XML 문서를 생성, 확인, 출력할 수 있습니다. 클래스 생성기는 Java용 Oracle XML 구문 분석기와 함께 작동되는데, 이 구문 분석기는 DTD나 스키마를 구문 분석하고 분석된 문서를 클래스 생성기로 전달합니다.

예제: Java용 XML 클래스 생성기
다음 예제에서는 Java용 XML 클래스 생성기를 사용하여 DTD를 처리하고 DTD 요소의 클래스를 생성하는 방법을 보여줍니다. 또한 프로그래밍 방식으로 요소 클래스의 메소드를 사용하여 유효한 XML 문서를 생성하는 방법을 보여줍니다.
입력 DTD
다음 DTD 파일은 employee.dtd라는 직원 데이타이며 클래스 생성기의 입력으로 사용됩니다. 이 DTD에서는 XML 문서 루트가 EMP, 행 요소가 EMP_ROW로 지정되어 있으며, EMP는 하나 이상의 EMP_ROW로 구성됩니다. 각 EMP_ROW에는 직원 번호에 대한 필수 속성인 EMPNO와 직원 이름에 대한 ENAME, 업무 유형에 대한 JOB, 관리자에 대한 MGR 등과 같은 여러 옵션 속성이 있습니다. 요소 정의에서 옵션 속성 다음에는 "?"가 붙습니다. EMPNO, ENAME 및 기타 EMP_ROW 요소 정의는 요소가 일반 문자 데이타(PCDATA)를 가지고 있음을 나타냅니다.
DTD 처리를 통해 Java 클래스 생성
다음 샘플 코드는 DTD를 처리하고 DTD의 요소에 대해 해당 클래스를 생성합니다. 위의 DTD(employee.dtd)에서 클래스 생성기를 실행하면 각 요소(EMP, EMP_ROW, EMPNO, ENAME 등)에 대해 Java 클래스가 생성됩니다. 그런 다음 Java 애플리케이션이 이 클래스에 정의된 메소드를 사용하여 직원 데이타가 포함된 유효한 XML 문서를 생성할 수 있습니다.
Java 클래스로부터 유효한 XML 문서 생성
다음 Java 코드는 생성된 메소드가 어떻게 사용되는지 보여줍니다. 여기에서는 emp_row1 및 emp_row2라는 2개의 행 요소가 생성되며, 각 열의 요소도 생성됩니다(empno1, ename1 등). XML 문서 트리를 작성하기 위해 다양한 데이타 요소를 각 행 요소에 트리 노드로 할당하여 그룹화합니다. 그런 다음 각 행 요소를 문서 루트 요소 EMPLIST에 노드로 추가합니다. 이 예제에서 클래스 생성기에 의해 생성되는 클래스 이름은 대문자입니다.
import oracle.xml.classgen.*; import oracle.xml.parser.*; public class CreateEmployees { public static void main (String args[]) { try { EMP EMPLIST = new EMP(); DTD dtd = EMPLIST.getDTDNode(); // get static from base document // New employee emp_row1 EMP_ROW emp_row1 = new EMP_ROW(1); // create row and set ROWNO EMPNO empno1 = new EMPNO("7654"); ENAME ename1 = new ENAME("MARTIN"); JOB job1 = new JOB("SALESMAN"); MGR mgr1 = new MGR("7698"); HIREDATE hiredate1 = new HIREDATE("1981-09-28 00:00:00.0"); SAL sal1= new SAL("1250"); COMM comm1= new COMM("1400"); DEPTNO deptno1 = new DEPTNO("30"); // New employee emp_row2 EMP_ROW emp_row2 = new EMP_ROW(2); // create row and set ROWNO EMPNO empno2 = new EMPNO("7788"); ENAME ename2 = new ENAME("SCOTT "); JOB job2 = new JOB("ANALYST "); MGR mgr1 = new MGR("7566"); HIREDATE hiredate2 = new HIREDATE("1987-04-19 00:00:00.0"); SAL sal2= new SAL("3000"); COMM comm2= new COMM(""); DEPTNO deptno2 = new DEPTNO("20"); emp_row1.addnode(empno1); // Add data as tree nodes to emp_row1 emp_row1.addnode(ename1); ... emp_row2.addnode(empno2); // Add data as tree nodes to emp_row2 emp_row2.addnode(ename2); ... EMPLIST.addNode(emp1); // Add emp_row1 as tree node to // EMPLIST doc root EMPLIST.addNode(emp2); // Add emp_row2 as tree node to // EMPLIST doc root EMPLIST.validateContent(); EMPLIST.print(System.out); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); } } }Java 애플리케이션에 의해 생성되는 XML 문서
위의 Java 애플리케이션은 다음과 유사한 XML 문서를 생성합니다.
<?xml version="1.0"?> <!DOCTYPE EMP SYSTEM "employee.dtd"> <EMP> <EMP_ROW ROWNO = "1"> <EMPNO>7654</EMPNO> <ENAME>MARTIN</ENAME> <JOB>SALESMAN</JOB> <MGR>7698</MGR> <HIREDATE>1981-09-28 00:00:00.0</HIREDATE> <SAL>1250</SAL> <COMM>1400</COMM> <DEPTNO>30</DEPTNO> /EMP_ROW> <EMP_ROW ROWNO = "2"> <EMPNO>7788</EMPNO> <ENAME>SCOTT</ENAME> <JOB>ANALYST</JOB> <MGR>7566</MGR> <HIREDATE>1987-04-19 00:00:00.0</HIREDATE> <SAL>3000</SAL> <COMM></COMM> <DEPTNO>20</DEPTNO> </EMP_ROW> </EMP>Java용 XML SQL 유틸리티
Java용 XML SQL 유틸리티는 다음과 같은 작업을 수행하는 Java 클래스 세트로 구성되어 있습니다.
질의 결과로부터 XML 생성
다음 그림과 같이 XML SQL 유틸리티는 SQL 질의를 처리하고 결과를 XML 문서로 반환합니다.

결과 XML 문서 구조는 질의 결과를 반환하는 데이타베이스 스키마의 내부 구조를 기반으로 합니다. 열은 최상위 요소로 매핑됩니다. 스칼라 값은 텍스트로만 구성된 컨텐트를 가진 요소로 매핑되고, 객체 형식은 하위 요소로 나타나는 속성을 가진 요소로 매핑됩니다. 또한 컬렉션은 요소 목록으로 매핑되고, 객체 참조 및 참조 제약 조건은 XML IDREF로 매핑됩니다.
이 유틸리티는 XML 문서의 문자열 프레젠테이션이나 요소의 내부 메모리 XML DOM 트리를 생성합니다. 요청자에게 XML 문서를 반환하는 경우 문자열 프레젠테이션이 가장 좋습니다. XML을 프로그래밍 방식으로 조작하는 경우, 예를 들어, XSLT 프로세서를 사용하여 XML을 변환하거나 DOM 메소드를 사용하여 XML을 검색하거나 수정하는 경우에는 DOM 프레젠테이션을 사용해야 합니다.
또한 XML SQL 유틸리티를 사용하여 질의할 기본 테이블의 스키마를 기반으로 하는 DTD를 생성할 수 있습니다. 생성된 DTD를 Java용 XML 클래스 생성기의 입력으로 사용할 수 있습니다. 이 클래스 생성기는 DTD 요소를 기반으로 하는 클래스 세트를 생성합니다. 그런 다음 이 클래스를 사용하여 웹 기반 양식의 인프라를 생성하는 Java 코드를 작성할 수 있습니다. 이 인프라를 기반으로 웹 양식은 사용자 데이타를 캡처하고 데이타베이스 스키마와 호환되는 XML 문서를 생성합니다. 그 다음 추가로 처리하지 않고도 이 데이타를 직접 해당 데이타베이스 테이블이나 객체 뷰에 작성할 수 있습니다. 이 방법에 대한 자세한 내용은 애플리케이션 간 데이타 교환을 참조하십시오.
예제: 질의 결과로부터 XML 생성
다음은 XML SQL 유틸리티를 사용하여 질의로부터 XML 문서를 생성하는 간단한 예제입니다. 다음 질의를 유틸리티로 전달하면:
XML 문서의 형식에 유의하십시오. 기본적으로, ROWSET은 XML 문서 요소의 요소 이름입니다. ROW는 질의 결과에서 각 행의 요소 이름이며, EMPNO 및 ENAME과 같은 데이타는 ROW 노드에서 중첩된 요소로 나타날 수도 있습니다. 데이타는 일반적으로 요소로 표시되고 속성은 필요한 경우 데이타를 제한하는 데 사용됩니다. 애플리케이션은 서로 다른 태그 세트가 필요로 하며 XSL 스타일시트는 동적으로 변환을 수행할 수 있습니다.
예제: 질의 결과로부터 XML 생성 및 데이타 구성
다음 Java 코드는 데이타베이스를 질의하여 결과를 포함한 XML 파일을 생성합니다. 질의는 간단한 select EMPNO, ENAME from EMP입니다.
import java.sql.*; import java.math.*; import oracle.xml.sql.query.*; import oracle.jdbc.*; import oracle.jdbc.driver.*; public class xmlquerydb { public static void main(String args[]) throws SQLException { String tabName = "emp"; String user = "scott/tiger"; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //initiate a JDBC connection Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:"+user+"@"); // initialize the OracleXMLQuery OracleXMLQuery qry = new OracleXMLQuery(conn,"select EMPNO, ENAME from "+tabName ); // structure the generated XML document qry.setMaxRows(2); // set the maximum number of rows to be returned qry.setRowsetTag("ROOTDOC"); // set the root document tag qry.setRowTag("DBROW"); // sets the row separator tag qry.setStyleSheet("emp.xsl"); // sets the stylesheet // get the XML document in string format String xmlString = qry.getXMLString(); // print out the XML document System.out.println(" OUTPUT IS:\n"+xmlString); } }결과 XML 파일은 EMP 테이블에서 찾은 처음 2행을 반환합니다.
<?xml version="1.0"?> <ROOTDOC> <DBROW id="1"> <EMPNO>7876</EMPNO> <ENAME>ADAMS</ENAME> </DBROW> <DBROW id="2"> <EMPNO>7499</EMPNO> <ENAME>ALLEN</ENAME> </DBROW> </ROOTDOC>테이블에 XML 쓰기
다음 그림과 같이 XML SQL 유틸리티를 사용하여 Oracle8i 객체 관계형 데이타베이스 테이블에 XML 데이타를 쓸 수 있습니다.

Oracle8i 테이블에 XML 문서를 저장하면 문서 구조가 보존됩니다. 요소 태그 이름은 테이블의 열 이름으로 매핑되고, 텍스트로만 구성된 컨텐트가 있는 요소는 스칼라 열로 매핑되며, 하위 요소가 포함된 요소는 객체 형식으로 매핑됩니다. 또한 요소 목록은 컬렉션으로 매핑됩니다. 텍스트 주석이나 설명처럼 구조화되지 않은 데이타는 기본 데이타베이스 테이블로 매핑될 수 없으므로 이러한 종류의 데이타는 데이타베이스에 CLOB로 저장해야 합니다. 자세한 내용은 Oracle8i 및 interMedia 설명서를 참조하십시오.
예제: 테이블에 XML 쓰기
다음 Java 코드는 XML 파일 emp.xml의 데이타를 EMP 테이블에 삽입합니다. 이 예제는 XML 문서가 EMP 테이블 구조와 일치한다고 가정합니다.
import oracle.xml.sql.dml.*; import java.sql.*; import oracle.jdbc.driver.*; import oracle.jdbc.*; import java.net.*; public class xmlwritedb { public static void main(String args[]) throws SQLException { String tabName = "EMP"; // Table into which to insert XML data String fileName = "emp.xml"; // XML document filename DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // Initialize a JDBC connection Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger@"); // Insert XML data from file (filename) into // database table (tabName) OracleXMLSave save = new OracleXMLSave(conn, tabName); URL url = save.createURL(fileName); int rowCount = save.insertXML(url); System.out.println(" successfully inserted "+rowCount+ " rows into "+ tabName); conn.close(); } }XML 문서를 데이타베이스 테이블에 쓰려고 하지만 XML 데이타가 기본 테이블 구조와 일치하지 않는 경우 데이타베이스에 쓰기 전에 XML 문서를 변환해야 합니다. 자세한 내용은애플리케이션간 데이타 교환를 참조하십시오.
XSQL 서블릿
XSQL 서블릿은 SQL 질의를 처리하고 결과를 XML로 출력하는 도구입니다. 이 프로세서는 Java 서블릿으로 구현되었으며 내장 SQL 질의가 포함된 XML 파일을 입력으로 사용합니다. 대부분의 작업은 Java용 XML 구문 분석기와 XML SQL 유틸리티를 사용하여 수행됩니다.
Java 서블릿을 지원하는 모든 웹 서버에서 이 서블릿을 실행할 수 있습니다. 다음 그림은 클라이언트에서 서블릿으로, 다시 클라이언트로 데이타가 이동하는 방식을 보여줍니다. 이벤트 순서는 다음과 같습니다.
- 사용자가 브라우저를 통해 URL을 입력하면 브라우저는 이 URL을 해석하여 Java 웹 서버를 통해 XSQL 서블릿으로 전달합니다. 이 URL에는 대상 XSQL 파일(.xsql) 이름이 있으며, 옵션으로는 값, XSL 스타일시트 이름 등과 같은 매개변수가 포함되어 있습니다. 다른 방법으로는 브라우저와 Java 웹 서버를 생략하여 명령줄에서 XSQL 서블릿을 실행하는 방법이 있습니다.
- 서블릿은XSQL 파일을 Java용 XML 구문 분석기로 전달합니다. 이 구문 분석기는 XML을 분석하여 XML 컨텐트에 액세스하는 API를 생성합니다.
- 서블릿의페이지 프로세서 구성 요소는 이 API를 사용하여 XML 매개변수와 SQL 문(<query></query> 태그 사이의 내용)을 XML SQL 유틸리티에 전달합니다. 또한 페이지 프로세서는 모든 XSL 처리 문을 XSLT 프로세서에 전달합니다.
- XML SQL 유틸리티는 SQL 질의를 기본 Oracle8i 데이타베이스로 보내고, 이 데이타베이스는 질의 결과를 유틸리티에게 반환합니다.
- XML SQL 유틸리티는 질의 결과를 XML 형식의 텍스트로 XSLT 프로세서에게 반환합니다. 결과는 최초의 <query> 태그와 동일한 위치에 있는 XML 파일에 저장됩니다.
- 필요한 경우, 질의 결과와 기타 XML 데이타는 지정된 XSL 스타일시트를 사용하는 XSLT 프로세서에 의해 변환됩니다. 이 데이타는 HTML 또는 스타일시트에 정의된 기타 형식으로 변환될 수 있습니다. XSLT 프로세서는 최초의 URL 요청이 시작된 클라이언트 유형에 따라 서로 다른 스타일시트를 선택적으로 적용합니다. 이 HTTP_USER_AGENT 정보는 HTTP 요청을 통해 클라이언트에서 얻을 수 있습니다.
- XSLT 프로세서는 완성된 문서를 사용자에게 표시하도록 다시 클라이언트 브라우저에게 전달합니다.

예제: XSQL 서블릿
다음은 직원 테이블 EMP를 질의하는 간단한 XSQL 파일입니다. 이 질의의 기본 기능은 테이블의 모든 직원 행을 반환하는 것입니다. 옵션으로, 브라우저에서 XSQL 서블릿을 호출할 때 find= URL 매개변수를 추가하여 검색 범위를 좁힐 수 있습니다. 예를 들어, 검색 값으로 'T' 문자를 지정하면 ENAME에 T 문자가 포함된 행만 반환합니다. 또한 sort= URL 매개변수를 지정하여 반환된 행을 정렬할 수 있습니다. 예를 들어, EMPNO를 지정하면 행이 직원 번호순으로 정렬됩니다.
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="rowcol.xsl"?> <query connection="demo" find="%" sort="ENAME" null-indicator="yes" > SELECT * FROM EMP WHERE ENAME LIKE '%{@find}%' ORDER BY {@sort} </query>또한 XSQL 파일은 반환된 결과를 XSL 스타일시트 rowcol.xsl을 사용하여 처리하도록 지정할 수 있습니다. 이 스타일시트는 다음과 같습니다.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body class="page"> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="ROWSET"> <center> <table border="0" cellpadding="4"> <xsl:choose> <xsl:when test="ROW"> <!-- present headings: row[1] columns +--> <xsl:for-each select="ROW[1]"> <tr> <xsl:for-each select="*"> <th align="left"> <xsl:attribute name="class"> </xsl:attribute> <xsl:value-of select="name(.)"/> </th> </xsl:for-each> </tr> </xsl:for-each> <xsl:apply-templates/> </xsl:when> <xsl:otherwise> <tr><td>No Matches</td></tr> </xsl:otherwise> </xsl:choose> </table> </center> </xsl:template> <!-- present rows and columns +--> <xsl:template match="ROW"> <tr> <xsl:attribute name="class"> </xsl:attribute> <xsl:for-each select="*"> <td> <xsl:attribute name="class"> </xsl:attribute> <xsl:apply-templates select='.'/> </td> </xsl:for-each> </tr> </xsl:template> </xsl:stylesheet>아래 그림은 XSQL 서블릿이 XSQL 파일 emp.xsql 및 rowcol.xsl 스타일시트를 사용하여 생성한 HTML 페이지입니다. 이 서블릿은 다음 URL을 사용하여 실행되었습니다.
EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00.0 | 1250 | 1400 | 30 |
7788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00.0 | 3000 |
| 20 |
73369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00.0 | 800 | 20 | |
7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00.0 | 1500 | 0 | 30 |
XML Transviewer Java Beans
XML Transviewer Beans는 Java 애플리케이션 또는 애플릿용 XML 구성 요소 세트입니다. 이 시각적 및 비시각적 Java 구성 요소를 Oracle JDeveloper에 통합하면, 개발자는 XML 기반 데이타베이스 애플리케이션을 신속하게 작성하고 배포할 수 있습니다. 사용할 수 있는 bean은 다음과 같습니다.
DOM Builder Bean
DOM Builder Bean은 bean 인터페이스를 사용하여 Java XML 구문 분석기를 캡슐화하고 비동기 구문 분석이 가능하도록 기능을 확장합니다. 리스너를 등록하면 Java 애플리케이션은 대형 문서나 연속적인 문서를 구문 분석하고 호출 프로그램으로 즉시 제어를 반환할 수 있습니다.
XML Source Viewer Bean
XML Source View Bean은 컬러 강조 XML/XSL 구문을 통해 XML 및 XSL 파일 보기를 향상시켜줍니다. 이 기능은 편집 애플리케이션을 사용하여 XML 문서를 수정할 때 유용합니다. DOM Builder Bean과 쉽게 통합할 수 있으므로 지정된 DTD에 대해 사전 또는 사후 구문 분석 및 확인이 가능합니다.
XML Tree Viewer Bean
XML Tree View Bean은 XML 문서를 시각적으로 표시하므로 사용자는 마우스를 사용하여 선택한 브랜치(branches)를 숨기거나 표시하는 방식으로 쉽게 트리를 조작할 수 있습니다.
XSL Transformer Bean
XSL Transformer Bean을 사용하면 XSL 스타일시트를 적용하여 XML 문서를 XML, HTML, DDL을 포함한 거의 모든 텍스트 기반 형식으로 변환할 수 있습니다. 다른 bean과 통합하면 애플리케이션이나 사용자가 곧바로 변환 결과를 볼 수 있습니다. 또한 이 bean을 서버측 애플리케이션 또는 서블릿의 기반으로 사용하면 질의 결과를 XML로 표시하는 XML 문서를 브라우저에 표시되도록 HTML로 렌더링할 수 있습니다.
XML 스키마 프로세서
XML 스키마 프로세서는 XML 파일을 구문 분석하고 확인하며 DTD에서 제공되는 이상의 기능을 제공합니다. W3C는 "XML 스키마는 공유 어휘를 표현하고 사람들이 정한 규칙을 시스템이 수행할 수 있도록 한다"라고 정의합니다. Oracle XML 스키마 프로세서는 W3C XML Schema Working Draft의 다음 3가지 조항을 지원합니다:
또한 XML 스키마는 Oracle9i 데이타베이스에서 네이티브(native) XML 지원의 핵심으로, 개발자가 Java와 SQL을 사용하여 쉽고 편리하게 복잡한 XML e-business 데이타를 조작할 수 있도록 합니다. 따라서 오라클 고객은 최신 개방형 XML 표준의 장점을 활용할 수 있습니다.
Oracle9i 제품군
Oracle9i는 SQL을 통해 데이타베이스에 XML을 저장하고 기존 데이타베이스 데이타를 XML로 렌더링할 수 있습니다. Oracle9i의 XML 지원 범위는 다음과 같습니다.
이 기능들은 특히 B2B 및 B2C eBusiness, 패키지 애플리케이션, 인터넷 컨텐트 관리 분야를 지원합니다. 개발자는 이 기능들을 사용하여 기존의 관계형 컨텍스트나 순수 XML 컨텍스트에서 XML을 사용하면서 Oracle9i Database의 고유 확장성, 관리성, 신뢰성의 장점을 충분히 활용할 수 있습니다.
데이타베이스의XML
데이타베이스에XML 문서를 저장하는 기본적인 방법은 다음과 같습니다:
- XML 문서를 CLOB 또는 BLOB에 태그와 함께 변경되지 않은 단일 객체로 저장.
- XML 문서를 데이타로 저장하고 태그가 없는 상태로 객체 관계형 테이블에 배포.
- 뷰를사용하여 XML 문서와 데이타 결합.
XML 문서의 구조에 따라 이 방법 중 하나를 선택할 수 있습니다.
XML 문서를 CLOB 또는 BLOB로 저장
XML 문서가 전체 문서를 교체해야 업데이트되는 정적 컨텐트를 가지고 있는 경우, 변경되지 않은 XML 문서를 CLOB 또는 BLOB에 저장하는 것은 좋은 방법입니다. 이러한 예로는 기사, 광고, 책, 계약서 등과 같이 텍스트로 작성된 문서를 들 수 있습니다. 이 문서들의 특징은 문서 중심이라는 점이며 모두 데이타베이스에서 제공됩니다. 이러한 종류의 문서를 Oracle9i에 변경되지 않은 상태로 저장하면, 업계에서 입증된 데이타베이스의 이점과 파일 시스템 스토리지에 대한 신뢰성을 얻을 수 있습니다. XML 문서를 데이타베이스 외부에 저장해도 Oracle9i 기능을 사용하여 BFILES, URL 및 텍스트 기반 인덱싱을 통해 문서의 인덱스, 질의 및 효과적인 검색이 가능합니다.
XML 문서를 데이타로 저장
XML 문서 구조가 잘 정의되어 있고 다른 방법으로 업데이트하거나 사용할 수 있는 데이타가 포함된 경우, 이 문서는 데이타 중심입니다. 대개 XML 문서에는 복잡한 구조를 가진 요소나 속성이 포함되어 있습니다. 이러한 문서의 예로는 판매 주문서나 견적서, 항공 스케줄 등을 들 수 있습니다. Oracle9i에는 객체 관계형 확장과 함께 객체 형식, 객체 참조 및 컬렉션을 사용하여 데이타베이스의 데이타 구조를 캡처하는 기능이 있습니다. 또한 XML 데이타를 객체 관계형 형식으로 저장 및 보존하는 2가지 옵션은 다음과 같습니다.
- 관계형테이블에 요소의 속성을 저장하고 XML 요소의 구조를 캡처할 객체 뷰를 정의합니다.
- 객체 테이블에 구조화된 XML 요소를 저장합니다.
일단 객체 관계형 형식으로 저장하면 필요한 경우에 SQL을 사용하여 쉽게 데이타를 업데이트, 질의, 재배치하고 서식을 변경할 수 있습니다.
XML SQL 유틸리티는 기본 객체 관계형 스토리지로 매핑하는 방식으로 XML 문서를 저장하는 기능을 제공합니다. 반대로 객체 관계형 데이타를 XML 문서로 가져오는 기능도 제공합니다.
XML 문서가 구조화되어 있지만 XML 문서 구조가 기본 데이타베이스 스키마 구조와 호환되지 않는 경우, 데이타베이스에 데이타를 쓰기 전에 알맞은 형식으로 변환해야 합니다. XSL 스타일시트를 사용하거나 프로그래밍 방식으로 이러한 목적을 달성할 수 있지만 필요한 경우 데이타 중심 XML 문서를 변경되지 않은 단일 객체로 저장해야 하는 경우가 있습니다. 또한 다른 방법으로는, 다양한 XML 문서 구조와 일치하는 객체 뷰를 정의하고 대체 트리거를 정의하여 알맞은 변환을 수행하고 기본 데이타를 업데이트할 수 있습니다.
뷰를사용하여 XML 문서와 데이타 결합
마지막으로, 구조화된 XML 데이타와 그렇지 않은 데이타가 결합된 경우 전체를 보고 실행하려면 뷰를 사용하면 됩니다. 뷰를 사용하면 다양한 방식으로 저장된 XML 데이타를 즉석에서 결합하여 객체를 생성합니다. 따라서 구조화된 데이타(직원 데이타, 고객 데이타 등)를 객체 관계형 테이블의 특정 위치에 저장하고 구조화되지 않은 관련 데이타(설명이나 주석 등)를 CLOB에 저장할 수 있습니다. 데이타 전체를 검색해야 하는 경우, 단순히 뷰의 select 문에서 type 생성자를 사용하여 다양한 데이타로부터 구조체를 생성하면 됩니다. 이렇게 하면 XML SQL 유틸리티가 뷰에서 생성된 데이타를 단일 XML 문서로 가져올 수 있습니다.
Oracle Internet File System
Oracle Internet File System XML 프레임워크는 대개 구문 분석에 의존합니다. 즉, 저장소에 파일을 삽입할 때 순서대로 해체합니다. 올바로 구문 분석된 경우에 이 요소들을 데이타베이스에 속성으로 저장하고 나중에 다시 조립할 수 있습니다. 또한 XML 파일을 사용하여 사용자 계정 생성과 같은 시스템 구성 작업을 수행할 수도 있습니다. 마지막으로, XML 파일은 구문 분석을 수행하지 않고도 저장될 수 있습니다. 오라클 인터넷 파일 시스템에 포함된 구문 분석 프레임워크는 새로운 문서 형식을 식별하고 이 문서에 구성 가능한 구문 분석 로직을 적용하는 기능을 지원하므로 광범위하게 사용할 수 있습니다.
XML만 사용해서도 많은 개발 작업을 수행할 수 있습니다. 전체 API가 개방되고 문서화되었기 때문에 개발자는 고급 파일 시스템과 컨텐트 관리 기능을 쉽게 사용할 수 있습니다. 다음은 오라클 인터넷 파일 시스템으로 가능한 개발 프로젝트 중 몇 가지 예입니다.
- XML 지원 확장을 통해 새로운 XML 애플리케이션을 생성합니다.
- XML을 사용하는 문서 처리 제품을 작성합니다.
- 업무에 따라 문서를 조작하는 사용자 정의 구문 분석기와 렌더링 프로그램을 생성합니다.
- 그래픽이 포함된 워드 파일을 PDF로 렌더링하고 XML 스프레드시트가 포함된 워드 파일을 HTML 파일로 렌더링하는 사용자 정의 구문 분석기를 작성합니다.
- 특정 파일 형식에 대해 새로운 프레젠테이션 방법을 호출합니다.
- 파일의 사용자 정의 속성을 기반으로 파일을 여러 사용자 정의 렌더링 프로그램중 하나와 연결하는 사용자 정의 구문 분석기를 작성합니다.
- XML을 사용하여 보안 체계를 설계하고 구현합니다.
- 여러 애플리케이션과 폴더에 새로운 사용자 계정을 추가하는 작업을 간소화하는 XML 템플리트를 생성합니다.
Posted by akiss4u


