580 likes | 855 Vues
2 부 3 장 DataBase 를 이용한 XML 문서작성. XML 데이터의 저장과 검색 (1). ▶ 텍스트파일로 저장과 검색 확장자가 .xml 인 파일 형태로 XML 데이터를 저장하여 검색 시스템 등으로 검색하는 방법 트랜잭션이나 베타 제어 등과 같은 비교적 소규모인 웹 프로그램에서 사용되는 방법 모든 문서의 검색 - 워드프로세서의 '찾기' 기능과 같이 모든 문서에 대하여 검색
E N D
2부 3장 DataBase를 이용한 XML 문서작성
XML 데이터의 저장과 검색 (1) ▶텍스트파일로 저장과 검색 • 확장자가 .xml인 파일 형태로 XML 데이터를 저장하여 검색 시스템 등으로 검색하는 방법 • 트랜잭션이나 베타 제어 등과 같은 비교적 소규모인 웹 프로그램에서 사용되는 방법 • 모든 문서의 검색 - 워드프로세서의 '찾기' 기능과 같이 모든 문서에 대하여 검색 - XML문서의 논리구조를 유지하고 있는 파일을 검색하면 그 구조를 고려하지 않고내용에관계없는 정보까지 나타나게 된다는 문제점을 가지고 있음 • 구조를 의식한 검색 - XML 문서에서 요소들 사이의 구조를 고려하여 검색 - XML구조는 그 정보의 의미를 반영하고 있는 것이 일반적이므로 구조를 사용한 검색은 비교적 검색결과가 정확
XML 데이터의 저장과 검색 (2) ▶관계형 데이터베이스로의 저장과 검색 • 일반적으로 사용되는 데이터베이스는 관계형 데이터베이스 • 관계형 데이터베이스는 기본적으로 행과 열로 테이블을 구성하므로 트리 구조를 가진 XML을 그대로 저장하지 않음 • XML의 구조나 내용을 복수의 테이블로 나누고 XML문서의 각요소를 매핑하는 기법을 사용 - XML문서의 논리구조를 유지하고 있는 파일을 검색하면 그 구조를 고려하지 않고내용에 관계없는 정보까지 나타나게 된다는 문제점을 가지고 있음 • XML 문서를 테이블로 표현 • <학생테이블> • <학생> • <학번>2001103</학번> • <이름>홍길동</이름> • </학생> • .....................중략(반복) • <학생> • <학번>2003001</학번> • <이름>이은미</이름> • </학생> • </학생테이블>
XML 데이터의 저장과 검색 (3) ▶관계형 데이터베이스의 검색 • SQL에서는 테이블에서 정보를 추출할 때 SELECT 구문을 사용하는데 이때 SELECT 와FROM 구 및 WHERE 절을 사용하여 특정 테이블을 검색 • 학년이 2학년이상인 학생이름을 검색하고 싶을 경우, WHERE 조건절에 학년 > 2 라는 조건을 추가하여 검색 SELECT컬럼이름 FROM테이블 이름 WHERE조건 SELECT 이름 FROM 학생테이블 WHERE 학년 > 2
XML 데이터의 저장과 검색 (4) • 복수테이블에 대한 질의문은 학과명이 컴퓨터공학과인 학생의 이름을 검색하기위해 컴퓨터공학과의 학과코드가 학생테이블의 학과 코드와 같은 조건을 사용 SELECT 학생테이블.이름 FROM 학생테이블, 학과테이블 WHERE 학생테이블.학과코드= 학과테이블.학과코드 AND학과테이블.학과명= ‘컴퓨터공학과’ ▶추출된 데이터의 XML로의 변환 • 데이터베이스에 저장된 데이터를 검색하여 XML문서를 작성하려면 SQL을 이용하여 추출한 정보를 XML로 변환 • 데이터베이스에서 검색한 데이터를 XML로 변환하고 다시 HTML 문서형태로 만들어 지기까지 작업순서는 다음과 같다.
Excel 2000/97 데이터의 XML 변환 ▶Excel 2000/97 데이터의 XML 변환 • Excel 문서를 XML로 변환하는 Converter를 설치해야하는데 교재의 부록을 참고하여 DB2XML 프로그램을 설치 • 다음의 순서에 따라 작업 ① 윈도우즈에 설치되어있는 Microsoft Excel 2000프로그램을 실행시킨후, Sheet1에 그림과 같이 입력하고 ExcelExam.xls로 저장
Excel 2000/97 데이터의 XML 변환 (2) ② 윈도우즈에서 설정(S)의 제어판(C)에 있는 관리도구에서 데이터 원본(ODBC)를 실행시키면 그림과 같은 대화상자가 나타나는데 이때 추가(D)버튼을 클릭
Excel 2000/97 데이터의 XML 변환 (3) ③ 새 데이터 원본 만들기 대화 상자에서 Microsoft Excel Driver(*.xsl)를 선택한 뒤 마침버튼을 클릭
Excel 2000/97 데이터의 XML 변환 (4) ④ 그림과ODBC Microsoft Excel 설정 대화상자에서 데이터원본 이름(N) 항목에 ExcelOdbc 라고 입력하고 통합 문서 선택(S) 버튼을 클릭후, 통합 문서 선택 대화 상자에서 저장된ExcelExam.xls 파일을 선택하고 확인버튼을 클릭
Excel 2000/97 데이터의 XML 변환 (5) ⑤ DB2XML 프로그램을 실행시키면 DB2XML Application 대화상자가 나타나면, 그림과 같이DTD를 클릭한다.
Excel 2000/97 데이터의 XML 변환 (6) ⑥ Specification of Output 대화상자가 나타나는데 이때 그림과 같이 선택하고 ok버튼을 클릭 ⑦ DB2XML Application대화상자에서 Database를 선택하면 Specification of Database 대화상자가대화상자가 나타나는데 그림과 같이 설정하고ok버튼을 클릭.
Excel 2000/97 데이터의 XML 변환 (7) ⑧ DB2XML Application 대화상자에서 XML Attribute를 선택하면 Specification of XML Attributes 화면이 나타나는데 그림과 같이 설정
Excel 2000/97 데이터의 XML 변환 (8) ⑨ DB2XML Application 대화상자에서 XML Element를 선택한다. 그러면 Specification of XML Elements 대화상자가 나타나는데 그림과 같이 설정
⑩ Stylesheet 탭을 누른후 그림과 같이 공백으로 처리 Excel 2000/97 데이터의 XML 변환 (9)
Excel 2000/97 데이터의 XML 변환 (10) ⑪Database query부분에 검색할 질의문을 작성후, File name 부분에 ExcelExam.xml이름을 입력하고 Generate XML버튼을 클릭
Excel 2000/97 데이터의 XML 변환 (11) ⑫①∼⑩ 번 과정을 마치고 나면 그림과 같이 ExcelExam.xml 파일이 생성 ⑬ XML 문서를 실행한 결과 실행결과
Access 2000/97 데이터의 XML 변환 ▶Access 2000/97 데이터의 XML변환 • 앞서 설명한 Excel 2000/97 데이터의 XML변환에서처럼 DB2XML을 사용하여 변환 • XML 문서를 실행한 결과 실행결과 실행결과
객체지향 데이터베이스로의 저장과 검색 ▶객체지향 데이터베이스 • XML 데이터를 객체지향 데이터베이스(Object Oriented DataBase:OODB)에 저장할 경우 XML의 트리 구조를 객체지향의 데이터모델에 맞추어 저장 • 객체지향 언어에서는 다양한 정보를 객체로서 관리 • 보통 객체는 메모리 상에 존재하고 컴퓨터전원을 끄면 소멸되므로 실제 프로그 램에서는 객체에 대한 정보를 파일 시스템이나 관계형 데이터베이스에 저장하고 프로 그램이 실행될 때마다 정보를 읽어내어 객체를 재구축 함 • 객체를 재구축 하는 코드는 복잡해지기 쉽고 보수성이 떨어지므로 객체간의 구조를 유 지한 채 디스크에 기록할 수 있는 데이터베이스가 고안됨 • 객체지향 데이터베이스에서는 문자와 숫자 데이터의 처리와 저장을 중심으로 하는 관계형 데이터베이스보다 다양한 데이터를 취급하는 것이 용이해 짐. • 객체지향 데이터베이스는 복잡한 정보관리가 요구되는 분야를 중심으로 수요가 넓어지 고 있었는데, XML의 등장과 함께 XML 데이터구조를 무리 없이 저장할 수 있어서 각광 을 받게 됨.
객체지향 데이터베이스로의 저장과 검색 (2) ▶객체지향 데이터베이스와 XML • DOM형 데이터모델 - DOM에서 사용되고 있는 객체를 그대로 객체지향 데이터베이스에 저장하는 형식 - 사용하는 클래스는 Node 클래스와 이것을 계승한 Document 클래스 등으로 구성 - 다양한 형태의 XML을 객체지향언어로 조작하고 싶거나 또는 객체지향 데이터 베이스에 저장할 때 매우 적합함 • DTD형 데이터모델 - XML 문서의 구조는 DTD 정의에 의해 제약을 받을 수 있음. - DTD 제약에 따라 XML 문서가 작성되었을 때 DTD와 XML 문서 내용은 객체지향의 클래스와 인스턴스 관계에 대응됨. - 다만 DTD 전체를 하나의 클래스로 취급하는 것은 현실적이 아니므로 보통의 경우 요소형 선언마다 클래스를 작성
XML 전용데이터베이스로의 저장과 검색 ▶XML 전용데이터베이스로의 저장과 검색 • XML 전용 데이터베이스의 특징 - XML 전용 데이터베이스의 특징은 XML과 데이터베이스 데이터모델의 다른 점을 의식할 필요가 없음 - XML 전용 데이터베이스를 사용하는 장점 • XML 검색 - 데이터베이스에 저장된 XML 데이터를 검색하는 경우에 관계형 데이터베이스에서는 주로 SQL을 사용 - XML 전용 데이터베이스 등에서는 XML 전용의 질의 언어가 많이 사용되고 있으며XML의 계층구조로 검색하는 특징이 있음
XML 전용데이터베이스로의 저장과 검색 (2) • XML-QL - XML-QL은 DTD간의 XML 데이터변환이나 다수의 XML 데이터를 통합하기 위한 목적으로 설계된 XML 질의언어 - SQL과 비슷한 WHERE-IN-CONSTRUCT구조로 중첩된 질의를 지원 - WHERE-IN-CONSTRUCT 구조 • XQL(XML Query Language) - XQL은 XML문서나 프로그래밍 언어 안에 삽입하여 사용하는 간단한 질의언어 - XQL은 XQL식이라 하는 문법에 따라 기술되며 패턴이 XPath와 같고 노드가 기준 - XQL은 1998년 2월 문서계 XML 연구자 사이에서 처음 초안이 만들어지고 같은해9월에 W3C에 제안되었고 XquerY라고도 불리며 사용시스템으로는Tamino(Software AG)와 eXcelon(excelon Corp.)이 있음
XML 전용데이터베이스로의 저장과 검색 (3) - XQL규격은「http://www.w3c.org/TR/xquery」에서 확인 - XML-QL과 XQL과의 일반적 특징을 비교하면 다음의 표와 같다.
관계형 데이터베이스와 XML ▶관계형 데이터베이스의 XML 표현 • 요소로의 데이터베이스 표현 - 관계형 데이터베이스에서는 큰 개념을 기술하는 데이터 포인트들이 컬럼으로 구성된 테이블로 표현 - 학생 정보를 표현하기위한 테이블 생성구문 - 테이블 생성결과 CREATE TABLE Student ( StudentNumber varcher(50), StudentName varcher(50), Address varchar(100), TelNumber varchar(50), EmailAddress varchar(60))
관계형 데이터베이스와 XML (2) - XML에서는 데이터 포인트들의 그룹을 다시 그룹핑되어 요소로 표현되는 더 큰 개념 으로 기술 할 수 있음. - Student 테이블의 정보를 각각의 요소로 표현한 결과 <!ELEMENT Student (StudentNumber, StudentName, Address, TelNumber, EmailAddress)> <!ELEMENT StudentNumber (#PCDATA)> <!ELEMENT StudentName (#PCDATA)> <!ELEMENT Address (#PCDATA)> <!ELEMENT TelNumber (#PCDATA)> <!ELEMENT EmailAddress (#PCDATA)> <Student> <StudentNumber> 001 </StudentNumber> <StudentName> 홍길동 </StudentName> <Address> 대전시 중구 오정동 </Address> <TelNumber>042-111-1111 </TelNumber> <EmailAddress> hong@ce.hannam.ac.kr </EmailAddress> </Student>
관계형 데이터베이스와 XML (3) • XML 검색 - XML 문서내의 데이터 포인트를 표현하는 또 다른 방법은 속성을 이용 - 아래는 속성을 이용하여 <Student>를 정의한 소스와 상세 데이터가 <Student>요소의 속성으로 저장된 부분임. <!ELEMENT Student EMPTY> <!ATTLIST Student StudentNumber CDATA #REQUIRED StudentName CDATA #REQUIRED Address CDATA #REQUIRED TelNumber CDATA #REQUIRED EmailAddress CDATA #REQUIRED> <Student StudentNumber=“001” StudentName=“홍길동” Address=“대전시 중구 오정동” TelNumber=“042-111-1111" EmailAddress=“hms730@ce.hannam.ac.kr"/>
MS-SQL Server 2000과 XML과의 연동 ▶FOR XML을 이용한 SQL Server 2000에서의 검색 • FOR XML을 이용한 SQL Server 2000에서의 데이터 추출과정 • FOR XML의 기본 문법
MS-SQL Server 2000과 XML과의 연동 (2) • FOR XML에서의 3가지 모드 • FOR XML의 3가지 옵션
MS-SQL Server 2000과 XML과의 연동 (3) • RAW 모드를 이용한 데이터 검색 - FOR XML의 RAW 모드를 이용하여 SELECT 구문을 수행하면 최상위 요소가 <row> 태그로 표현 - XML의 계층구조로 표현되지는 않음. ① 학번(number)과 이름(name) 그리고 주민등록번호(cs_number) 등으로 구성된student 테이블을 생성 ②student 테이블의 number, name, cs_number 데이터를 추출하기위한 SELECT구문으로 RAW 모드를 사용 SELECT number, name, cs_number FROM student FOR XML RAW
MS-SQL Server 2000과 XML과의 연동 (4) ③ 작성한 코드를 실행하면 <row>태그가 최상위 요소로 전환, 컬럼들은 속성이름(number, name, cs_number)이 되고 검색된 데이터는 속성값으로 표현
MS-SQL Server 2000과 XML과의 연동 (5) • AUTO 모드를 이용한 데이터 검색 - 단순 검색: 한 개의 테이블에서 검색할 때 RAW 모드로 검색한 결과와 비슷하게 표현되지만, AUTO 모드에서는 최상위 요소의 이름이 테이블의 이름으 로 표현 ① student 테이블에서 number, name, cs_number 컬럼을 검색하는 구문으로AUTO 모드만을 사용 SELECT number, name, cs_number FROM student FOR XML AUTO ② 검색결과는 student 테이블 이름이 최상위 요소이름(<student>)이 되었고, 각각의 컬럼은 속성이름(number, name, cs_number, dept_name)으로 표현
MS-SQL Server 2000과 XML과의 연동 (6) - ELEMENTS 옵션을 이용한 검색 : AUTO 모드에서 ELEMENTS 옵션을 사용하여 검색 을 하면 테이블의 모든 컬럼들이 각각 최상위 요소 와 그 하위 요소로 표현 ① AUTO 모드와 ELEMENTS 옵션을 함께 사용하여 검색 SELECT number, name, cs_number FROM student FOR XML AUTO, ELEMENTS ② 검색결과는 student 테이블 이름이 최상위 요소이름(<student>)이 되었고, 각각의 컬럼이 그 하위 요소이름(<number>,<name>,<cs_number>)으로 표현 • <student> • <number>20002206</number> • <name>김기동</name> • <cs_number>791103-1234567</cs_number> • </student> • .....................중략(반복) • <student> • <number>20021124</number> • <name>홍길동</name> • <cs_number>810624-1386522</cs_number> • </student>
MS-SQL Server 2000과 XML과의 연동 (7) • -두개 이상의 테이블에서 검색 : 두 개 이상의 테이블에서 검색할 때 검색 결과가 계층적 구조로 나타남 ① student 테이블과 dept 테이블이 존재하며, AUTO 모드를 이용하여 검색 ② Student 테이블과 Dept 테이블에서 number, name, cs_number, dept_name데이터를 추출하기 위한 SELECT 구문 SELECT student.number, student.name, student.cs_number, dept.dept_name FROM student, dept WHERE student.number = dept.number FOR XML AUTO
MS-SQL Server 2000과 XML과의 연동 (8) ③ 작성한 코드를 실행하면 student 테이블 이름이 최상위 요소이름(<student>)이 되었고, dept 테이블 이름이 하위 요소이름(<dept>)이 되었다. 또한 각 컬럼은 속성이름(number, name, cs_number, dept_name)으로, 데이터는 속성값으로 표현
MS-SQL Server 2000과 XML과의 연동 (9) • EXPLICIT 모드를 이용한 데이터 검색 - EXPLICIT 모드에서 컬럼별칭 지정 문법 : EXPLICIT 모드를 사용하기 위해서는 SELECT 구문에서 컬럼의 별칭을 기술, 만약 컬럼별칭을 지정하지 않고 검색할 경우 에러가 발생, 다음은 컬럼의 별칭을 기술 하는 형식을 나타내고 있음 ElementName ! TagNumber ! PropertyName ! Directive
MS-SQL Server 2000과 XML과의 연동 (10) • ① EXPLICIT 모드에서 지원되는 명령어를 사용하지 않고 태그의 별칭을 지정하는 소스 SELECT 1as Tag, NULLas Parent, student.numberas [학생정보! 1 ! 학번], student.nameas [학생정보! 1 ! 이름], student.cs_numberas [학생정보! 1 ! 주민등록번호] FROM student FOR XML EXPLICT ② 실행시킨 결과를 보면 학생정보가 요소이름이 되었고 학생정보의 속성이름으로학번,이름,주민등록번호가 생성 <학생정보학번="20002206" 이름="김기동”주민등록번호="791103-1234567"/> <학생정보학번="20011126" 이름="이순정”주민등록번호="800208-1587890"/> .....................중략(반복) <학생정보학번="20021100" 이름="이영진”주민등록번호="810822-1356545"/> <학생정보학번="20021124" 이름="홍길동”주민등록번호="810624-1386522"/>
MS-SQL Server 2000과 XML과의 연동 (11) - EXPLICIT 모드에서 지원되는 명령어
MS-SQL Server 2000과 XML과의 연동 (12) • ELEMENT, XML 명령어을 이용한 검색 - ELEMENT와 XML 명령어는 EXPLICIT 모드와 함께 사용되는데 XML 문서에서 요소를 생성 ① 학생의 학번과 이름을 XML의 요소로 지정한 소스코드 ② 위와같은 소스를 실행시키면 학생정보가 최상위 요소이름이 되었고 학번, 이름,주민등록번호가 하위 요소의 이름으로 생성 SELECT 1 as Tag, NULL as Parent, student.number as [학생정보! 1! 학번 ! ELEMENT], student.name as [학생정보! 1! 이름 ! ELEMENT], student.cs_number as [학생정보! 1! 주민등록번호 ! ELEMENT] FROM student FOR XML EXPLICT • <학생정보> • <학번>20002206</학번> • <이름>김기동</이름> • <주민등록번호>791103-1234567</주민등록번호> • </학생정보> • .....................중략(반복)
MS-SQL Server 2000과 XML과의 연동 (13) • XMLTEXT명령어를 이용한 검색 - XMLTEXT명령어는 데이터베이스의 컬럼에 포함된 데이터를 XML 문서에서 요소의 속성으로 표현할 때 사용 ① student 테이블이 구성되었다고 가정 ② 저장되어있는 데이터를 병역사항 요소의 속성으로 표현 SELECT 1 as Tag, NULL as Parent, student.number as [병역사항! 1! 학번], student.name as [병역사항! 1! 이름], etc as [병역사항! 1! ! XMLTEXT] FROM student FOR XML EXPLICT
MS-SQL Server 2000과 XML과의 연동 (14) ③ 작성한 구문을 실행시키면 다음과 같이 etc 컬럼에 저장되어있던 데이터가 학생 정보 요소의 속성으로 표현 • <병역사항학번="20002206" 이름="김기동“ 군별=육군">소집해제</병역사항> • <병역사항학번="20021100" 이름="이영진“ 군별=해군">군필</병역사항> • .....................중략(반복) • <병역사항학번="20021124" 이름="홍길동“ 군별=공군">군필</병역사항>
MS-SQL Server 2000과 XML과의 연동 (15) • CDATA명령어을 이용한 검색 - CDATA명령어는 데이터가 text, ntext, varchar, nvarchar형식일 때만 사용이 가능 데이터를 CDATA형식으로 표현 ① 학생의 주민등록번호를 CDATA형식으로 표현하기 위해 student.cs_number 컬럼을 검색할 때 별칭을 CDATA로 표현 ② 실행시킨 결과를 보면 학생의 주민등록번호(cs_number)가 CDATA형태로 표현컬럼 별칭을 지정할 때 PropertyNmae을 지정해서는 안됨 SELECT 1 as Tag, NULL as Parent, student.name as [학생정보! 1! 이름], student.cs_number as [학생정보! 1! ! CDATA] FROM student FOR XML EXPLICT • <학생정보이름="김기동”<![CDATA[791103-1234567]]></학생정보> • <학생정보이름="이순정”<![CDATA[800208-1587890]]></학생정보> • .....................중략(반복) • <학생정보이름="이영진”<![CDATA[810822-1356545]]></학생정보> • <학생정보이름="홍길동”<![CDATA[810624-1386522]]></학생정보>
MS-SQL Server 2000과 XML과의 연동 (16) • ID, IDREF, IDREFS명령어을 이용한 검색 - ID, IDREF, IDREFS명령어는 XML 문서 내의 요소들이 식별되어야 할 경우에 사용 ① 학생의 학번을 ID 형식으로 선언하여 EXPLICIT 모드로 검색하는 소스코드 ② 실행시킨 결과를 보면 일반적인 검색과 동일하게 각각의 요소와 속성으로 표현 SELECT 1 as Tag, NULL as Parent, student.number as [학생정보! 1! 학번 ! ID], student.name as [학생정보! 1! 이름] FROM student FOR XML EXPLICT • <학생정보학번="20002206" 이름="김기동”> • <학생정보학번="20011126" 이름="이순정”> • .....................중략(반복) • <학생정보학번="20021100" 이름="이영진”> • <학생정보학번="20021124" 이름="홍길동”>
MS-SQL Server 2000과 XML과의 연동 (17) • XMLDATA옵션을 이용한 검색 - ID 명령어와 XMLDATA옵션을 사용하여 EXPLICIT 모드로 검색,검색 결과는 스키마 구조를 포함한 XML 형태로 표현하고자 할 때 이용 ① 학생의 학번을 ID 형식으로 선언하고 FOR XML 부분에 EXPLICIT 모드와XMLDATA옵션을 함께 사용 SELECT 1 as Tag, NULL as Parent, student.number as [학생정보! 1! 학번 ! ID], student.name as [학생정보! 1! 이름] FROM student FOR XML EXPLICT, XMLDATA
MS-SQL Server 2000과 XML과의 연동 (18) ② 소스를 실행시키면 다음과 같이 스키마 정보를 포함한 형태로 나타나며,실행결 과처럼 학번의 dt:type속성이 id형식으로 정의 • <Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> • <ElementTypename="학생정보" content="mixed" model="open"> • <AttributeTypename="학번" dt:type="id"/> • <AttributeTypename="이름" dt:type="string"/> • <attribute type="학번"/> • <attribute type="이름"/> • </ElementType> • </Schema> • <학생정보xmlns="x-schema:#Schema1" 학번="20002206" 이름="김기동 " > • <학생정보xmlns="x-schema:#Schema1" 학번="20011126" 이름="이순정 " > • .....................중략(반복) • <학생정보xmlns="x-schema:#Schema1" 학번="20021100" 이름="이영진 " > • <학생정보xmlns="x-schema:#Schema1" 학번="20021124" 이름="홍길동 " >
OPENXML을 이용한 SQL Server 2000에서의 저장 ▶OPENXML을 이용한 SQL Server 2000에서의 저장 • OPENXML을 이용한 SQL Server 2000에서의 데이터 저장과정 • OPENXML의 기본 문법 - OPENXML은 SQL Server 2000에서 로우셋 제공자로 XML문서의 로우셋 뷰를 생성 - 로우셋은 테이블과 같기 때문에 SELECT쿼리에서 테이블 혹은 관계형 뷰 대신에 사용 - OPENXML은 XML 문서나 조각으로부터 데이터를 데이터베이스 테이블에 저장
OPENXML을 이용한 SQL Server 2000에서의 저장(2) • OPENXML의 파라미터 - OPENXML의 파라미터는 XML문서를 받아서 sp_preparedocument프로시저를 사용 하여 XML문서를 분석하여 메모리에 올려놓고 핸들값을 반환해 주고, 핸들값이 유지 되는 한 메모리상에 분석된 XML문서가 상주하도록 함
MS-SQL Server 2000과 XML과의 연동 (3) • WITH 구문 - WITH문을 사용하여 실제 테이블이나 컬럼에 각 노드를 매핑시킬수 있고, 생성할 로우셋의 설명을 제공하는데 사용
OPENXML을 이용한 SQL Server 2000에서의 저장 (1) ▶OPENXML을 이용한 데이터 저장 • OPENXML이 데이터베이스 테이블에 데이터를 저장하는 단계 ① FOR XML에서와 동일하게 학번(number)과 이름(name), 주민등록번호(cs_number)등으로 구성된 student 테이블을 생성하여 파라미터와 구문을 적용
OPENXML을 이용한 SQL Server 2000에서의 저장(2) ② XML을 삽입하기 위한 사용자 저장 프로시저를 생성하기 위해 CREATE PROCEDUER(PROC 생략 가능)의 구문을 사용, 프로시저 이름은 insert_student, 매개 변수는 xmldata라고 입력하여 지정 - 저장 프로시저 종류 CREATE PROCinsert_student @xmldata ntext AS ........ 중략
OPENXML을 이용한 SQL Server 2000에서의 저장(3) ③ hDoc이라는 하나의 변수를 선언하기 위하여 DECLARE 구문을 이용 ④ XML을 문서로 읽어들여 구문 분석을 하기 위해 EXEC 구문을 사용, sp_xml_preparedocument저장 프로시저를 통해서 xmldata변수의 내용을 읽음 CREATE PROC insert_student @xmldata ntext AS DECLARE@idoc int ........ 중략 DECLARE @idocint EXECsp_xml_preparedocument@hDocOUTPUT, @xmldata ........ 중략 ⑤ 읽어온 XML 문서에서 root 엘리먼트 이하를 student 테이블에 삽입하기 위하여INSERT INTO 구문과 WITH 구문을 사용. OPENXML을 사용하여 XML구조와 관계형 구조를 매칭 INSERT INTOstudent SELECT*FROMOPENXML[@hDoc, '/root/student',2] WITHstudent
OPENXML을 이용한 SQL Server 2000에서의 저장(4) ⑥읽어온 XML문서를 메모리에서 sp_xml_removedocument저장프로시저를 통해 제거 ⑦ OPENXML을 이용한 프로시저를 작성후 SQL Server 2000의 저장프로시저에 저장 WITH student EXECsp_xml_removedocument@hDoc GO CREATE PROC insert_student @xmldatantextAS DECLARE @idocint EXEC sp_preparedocument@idocOUTPUT, @xmldata INSERT INTO student SELECT *FROM OPENXML[@idoc, '/root/student',2] WITH student EXEC sp_removedocument@idoc GO