ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [XML] 001. XML 개요
    SsY/Class 2023. 7. 21. 12:25
    728x90
    XML 개요
    - SGML , HTML 과의 비교
    ■■■ XML(eXtensible Markup Language) ■■■
    
    ○ 개요
       마크업이란 문서 내용 이외에 문서 구조를 정의하거나 표현하기 위해 정의한
       부가적인 정보라 할 수 있으며, 마크업의 표현은 각 어플리케이션에서 정의한 고유한 방식으로 이루어진다.
       즉, 문서 편집기마다 마크업을 표현하는 방법이 서로 다르다는 의미이다.
      
       aflegocclef
       45
       00129300429
       
       <people>
       		<person sid="1">
       			<name>aflegocclef</name>
       			<age>45</age>
       			<tel>00129300429</tel>
       		</person>
       		<person sid="2">
       			<name>kefotkdclfe</name>
       			<age>28</age>
       			<tel>00192200028</tel>
       		</person>
       </people>
        
       ※ 참고
          1) SGML (Standard Generalized Markup Language)
             SGML 은 기술적 문서 마크업을 생성하는 기법을 제공하는 표준 일반화
             마크업 언어로 디지털 문서를 플랫폼에 상관없이 사용하기 위한 목적으로 만들어졌으며,
             1986년에 ISO-8897 표준으로 제정되었고
             문서의 논리적 구조와 내용을 기술하기 위한 마크업이다.
             
             장점 : 시스템과 플랫폼에 독립적 / 재사용성 / 공개 표준
             단점 - 작성 규칙의 복잡성으로인해 전문가들만을 위한 언어
                  - 관련 업계의 범용적인 지원 마비
                  
             → 이와 같은 단점을 어느정도 해결하고자 만들어진 마크업 언어가 바로 HTML 이다.
             
          2) HTML (Hyper Text Markup Language)
             HTML 은 웹에서 정보를 표현할 목적으로 제안한 마크업 언어로
             SGML 태그 중 일부를 미리 정의해서 사용하기 쉽게 만든 것이 바로 HTML 이다.
             이러한 HTML 은 인터넷의 빠른 보급과 확장으로 급 성장하였고
             현재 가장 많이 사용하는 마크업 언어이다.
             
             장점 : 웹 정보를 표현하는데 있어서 매우 범용적이다.
             단점 - 사용할 수 있는 태그가 제한적이다.
                  - 문서의 내용과 이를 화면에서 표현하기 위한 정보만 존쟇나다.
                    따라서 태그 내의 내용이 어떤 의미의 데이터를 포함하는지 알 수 없다.
                  - 문서에 포함된 정보간에 연관성을 표현할 수 없고, 
                    관련있는 정보를 검색하기 어렵다.
                  - 문서의 유효성을 검증하기 어렵다. 
                  - 전체 문서만 표현할 수 있다.
                  
          3) XML (eXtensible Markup Language)
             XML 은 SGML 과 HTML 의 문제점을 해결할 목적으로 개발된 언어로
             SGML 로부터 정보의 구조적 기술과 정보 내용과 표시 정보를 분리한 구조를 이어받고, 
             HTML 로부터 인터넷의 이용환경을 이어받았다.
             즉, XML 은 웹에서 구조화된 문서를 표현하고 전송할 수 있도록 설계된 마크업 언어로 
             기존 HTML 의 한계와  SGML 의 복잡함을 해결하기 위한 방안으로 제시된 마크업 언어로 
             다양한 표현이가능하고 확장성이 뛰어나며 간단하다.
             또한, 플랫폼에 독입적이며, 웹은 물론 어플리케이션에서도 사용이 가능하다.
             
             HTML 은 정해진 태그만을 사용하고 태그의 숫자도 제한을 두어서 사용이 편리하지만 
             태그가 미리 정해져있다는 단점이 있다.
             즉, 시시각각으로 변하는 인터넷 사용자들의 요구에 맞추기 위해서는
             태그도 그에 따라서 새로운 태그가 필요할 때가 있기 마련인데
             새로운 태그를 만들 수 없는 것이다.
             
             그래서 정해진 태그가 아니라 필요할 때마다 태그를 만들어서 사용할 수 있는 요구가 일어나기 시작했다.
             그것이 바로 XML 이다.
             결국 XML 은  SGML (표준화된 일반 마크업 언어)이 가지고 있는 장점인
             문서의 구조와 속성을 그대로 가지고 있으며, 
             HTML 의 단점인 정해진 태그 밖에 사용할 수 없다는 것을
             보완해서 나오기 시작한 것이다.
             
             //-- 장점 : HTML , SGML 의 단점을 보완해서 명확한 정체성을 가짐
             //--        데이터 효율적으로 구조화 가능
             //-- 단점 : 안에 데이터만 있으면 되는데, 구조화하는 과정에서 수많은 태그 발생(데이터 소모↑)
             
    ○ XML / HTML / SGML 비교
    
       ==========================================================================================
                   HTML                       SGML                       XML
       ==========================================================================================
       태그        내장된 DTD 정의/           사용자 정의 태그 사용      사용자 정의 태그 사용
                   사용자 정의 불가능    
       ------------------------------------------------------------------------------------------
       문서        불가능                     가능                       가능
       재사용 
       ------------------------------------------------------------------------------------------
       응용        단순한 문서의              복잡한 구조의 문서 및      SGML과 동일 / 
                   Presentation               방대한 내용을 요구하는     웹에서 정보 교환
                                              문서
       ------------------------------------------------------------------------------------------
       난이도      쉬움                       복잡하고 어려움            중간정도
                                                                         (SGML 의 단순화)
       ------------------------------------------------------------------------------------------
       검색        검색 어려움                자료의 표현과 내용이       SGML 과 동일
                   (검색 엔진 필요)           분리되어 정확한 검색가능
       ------------------------------------------------------------------------------------------
       출력방식    CSS                        DSSSL                      XSL
       ------------------------------------------------------------------------------------------
       데이터      교환시 부가되는            표현부와 내용부가          SGML 과 동일
       교환        작업량이 방대함            분리되어 교환이 용이함
       ==========================================================================================
       
             
    ○ XML 응용 분야
    
       ==========================================================================================
       분야          기술         내용
       ==========================================================================================
       웹/인터넷     CDF          웹 캐스팅(Web Casting)을 위한 메타 데이터를 기술하는 형식
                                  마이크로 소프트의 액티브 채널을 위한 언어
                     OSD          소프트웨어 배포와 설치를 위한 정보를 기술하기 위한 방식
       ------------------------------------------------------------------------------------------
       메타 데이터   RDF          메타 데이터를 기술하기 위한 범용적 데이터 기술 방법
                                  기존의 메타 데이터 기술 방법을 모두 포함
                                  최근에는 시맨틱 웹을 구현하기 위한 기술 언어로 사용
                     MCF          넷스케이프에서 제안한 메타데이터 기술 방법
       ------------------------------------------------------------------------------------------
       멀티미디어    SML          멀티미디어 데이터의 동기화를 위한 언어
       / 그래픽      PGML         2D 그래픽 데이터를 텍스트 형태로 표현하는 언어
       / 스피치      MusicML      음악 악보를 위한 언어
                                  악보에 쓰이는 다양한 기호를 표시하기 위한 언어
                     JSML         문서화한 정보를 스피커로 듣기 위해서 SUN 에서 발표했던
                                  XML 어플리케이션 언어
       ------------------------------------------------------------------------------------------
       비즈니스      OFX          금융 정보(화폐정보)를 교환하기 위한 언어
       / 금융        ML/EDI       서로 다른 환경에서 데이터를 주고받기 위한
                                  프레임워크를 제공하기 위해 제안된 언어
                     OTP          거래와 관련한 프로토콜 정의
                     ICE          비즈니스 업계의 정보를 주고받기 위한 표준
       ------------------------------------------------------------------------------------------
       과학          MathML       수학 기호를 표시하기 위한 언어
                     CML          화학식 표시를 위한 언어
                     BSML         DNA 구조와 같은 정보를 인코딩하고 디스플레이 하기 위한 언어
    
       ==========================================================================================
       
    ○ 마크업 언어
       - 태그를 가지고 데이터를 표현하는 언어
       - <시작태그>데이터</끝태그> : 엘리먼트
       
       - HTML 은 데이터를 표현하는 태그의 종류가 미리 지정되어 있는 상태이다
         <div>, <table>, <br> 태그 등
         
       - XML 은 데이터형식을 표현하는 언어이다.
         태그의 종류를 사용자 스스로 선택, 결정 한다.
         <이름>아몬드브리즈</이름>
         <전화번호>010-1234-1234</전화번호>
         
    ○ HTML 과 XML 문서의 내용 비교
    
       - 이름, 전화번호, 이메일 등의 데이터를 다루는 과정을 html 방식으로 보면 다음과 같다.
       
         <table>
         	<tr>
         		<td>아몬드브리즈</td>
         		<td>010-1234-1234</td>
         		<td>amond@test.com</td>
         	</tr>
         </table>
       
       - xml 방식으로 보면 다음과 같다.
       //-- 데이터의 구조와 속성을 한번에 전달 가능하다.
       
         <memberinfo sid="1">
         	<name>아몬드브리즈</name>
         	<tel>010-1234-1234</tel>
         	<email>amond@test.com</email>
         </memberinfo>
         
    ○ XML 문서 작성의 기본 규칙
       
       - XML 문서 상단에서 선언부 작성
         <?xml version="1.0"?>
         <?xml version="1.0" encoding="UTF-8"?>
         
       - 루트 엘리먼트 지정
         루트 엘리먼트의 이름은 사용자 스스로 결정
         나머지 모든 엘리먼크는 루트 엘리먼트 하위에만 존재할 수 있다.
         <?xml version="1.0" encoding="UTF-8"?>
         <루트>
         </루트>
       
       - 물리적으로 저장할 때 확장자 『.xml』 사용
       
       - 시작태그(여는 태그)와 끝 태그(닫는 태그)를 짝을 맞추어 사용.
       
       - 태그 간의 포함 관계를 이루어야 한다.
         (즉, 부모 자식 관계 성립)
         
       - 태그에는 속성 표현이 가능하다.
         (『속성="값"』 형태로 표기한다.)

    XMLStudy

    xml 은 구조화 시키는 것 뿐만 아니라 추후에 별도의 파일로 짝을 구성해서 표현을 해야한다.


    XmlApp01
    - 선언부와 루트만 존재하는 XML 문서
    • xmlTest.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <xmlTest>
    	<!-- 선언부와 루트만 존재하는 XML 문서 작성 -->
    	<!-- 루트 엘리먼트(xmlTest)도 사용자 결정 -->
    	<!-- XML 은 프로그램이 아니고, 데이터 표현 문서일 뿐이다. -->
    	<!-- 데이터를 표현하는 하위 엘리먼트 추가 - 마크업 언어 기본형식 -->
    </xmlTest>

    • memberList.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <memberList>
    	<!-- 루트 엘리먼트는 하나 -->	
    	<!-- 루트 엘리먼트의 이름은 『~~~.xml』의 파일 이름과 동일한 이름 사용 -->
    		<!-- + Well-Formed : 파일의 이름과 루트엘리먼트가 이름이 동일한 형태 -->
    	<!-- 스스로(본인)의 정보를 표현할 수 있는 문서 작성 -->
    	<!-- + 팀원들 -->
    
    	<!-- 단일일 때 -->
    	<name>SI</name>
    	<telephone><![CDATA[010-1234-1234]]></telephone>
    	<curriculumn>
    		<sub>JAVA SE</sub>
    		<sub>ORACLE</sub>
    		<sub><![CDATA[Servlet&JSP]]></sub>
    	</curriculumn>
    	<zipcode>12345</zipcode>
    	<addr>Mapogu, Seoul</addr>
    	
    	<!-- 복수(다수)의 데이터를 표현하는 경우 중간에 적절한 부모태그 지정 -->
    	<!-- 엘리먼트 하위에는 엘리먼트(또는 데이터)만 구성 -->
    	<!-- 특수문자가 포함된 데이터를 표현해야할 경우 『CDATA 섹션』으로 처리 -->
    	<!--
    		동일한 memberInfo 를 여러개 구성하게 되는 경우 속성과 속성값을 구성하는 것을 권장
    		mid=1
    	-->
    	<memberInfo mid="1">
    		<name>SI</name>
    		<telephone><![CDATA[010-1234-1234]]></telephone>
    		<!--
    			엘리먼트 사이의 영역을 PC(Parsed Character) 데이터의 영역
    			PC 데이터에 특수문자가 들어가있는 영역에서는 파싱중에 문제가 생길 수 있으므로
    			파싱을 하지 말라는 의미로 CDATA(씨데이터)섹션으로 구성해주는 것이다.
    			-> 이렇게 되면 문자열로 인식하게 된다고 한다.
    		-->
    		<curriculumn>
    			<sub>JAVA SE</sub>
    			<sub>ORACLE</sub>
    			<sub><![CDATA[Servlet&JSP]]></sub>
    		</curriculumn>
    		<zipcode>12345</zipcode>
    		<addr>Mapogu, Seoul</addr>
    	</memberInfo>
    	
    	<memberInfo mid="2">
    		<name>JB</name>
    		<telephone><![CDATA[010-1234-1234]]></telephone>
    		<curriculumn>
    			<sub>JAVA SE</sub>
    			<sub>ORACLE</sub>
    			<sub><![CDATA[Servlet&JSP]]></sub>
    		</curriculumn>
    		<zipcode>23455</zipcode>
    		<addr>Gangseo-gu, Seoul</addr>
    	</memberInfo>
    	
    	<memberInfo>
    		<name>AH</name>
    		<telephone><![CDATA[010-1234-1234]]></telephone>
    		<curriculumn>
    			<sub>JAVA SE</sub>
    			<sub>ORACLE</sub>
    			<sub><![CDATA[Servlet&JSP]]></sub>
    		</curriculumn>
    		<zipcode>34567</zipcode>
    		<addr>Incheon</addr>
    	</memberInfo>
    		
    	<memberInfo>
    		<name>JY</name>
    		<telephone><![CDATA[010-1234-1234]]></telephone>
    		<curriculumn>
    			<sub>JAVA SE</sub>
    			<sub>ORACLE</sub>
    			<sub><![CDATA[Servlet&JSP]]></sub>
    		</curriculumn>
    		<zipcode>12345</zipcode>
    		<addr>Mapogu, Seoul</addr>
    	</memberInfo>
    	
    </memberList>

    DTD
    ■■■ DTD(Document Type Definition) ■■■
    //-- HTML 에서의 유효성에 대한 단점을 XML 에서 보완한 것
    
    ○ 개요 
       XML 문서의 엘리먼트, 속성에 대한 구조(structure)를 표현한 문서.
       //-- XML 의 명세서? 명세부 같은 느낌 -- XML 이 몸체부!
       //-- CSS 처럼 외부에서 HTML 을 수식해주는 도와주는 느낌은 아님!
       
       DTD(Document Type Definition)는 문서의 형태를 정의하는 것으로
       XML 문서의 구조를 명시적으로 선언하는 역할을 하며
       XML 문서가 잘 만들어진 유효한 문서인지를 확인하기 위해 사용하는 문서이다.
       따라서, DTD 를 사용하여 요소와 요소의 내용, 속성과 속성의 내용
       그리고 요소의 순서나 반복성을 미리 정해놓고 XML 문서를 작성하는 것이다.
       이렇게 되면 XML 문서를 작성하는 경우에 잘못된 문서를 작성하게 되는 실수를 줄일 수 있게 된다.
       
    ○ DTD 샘플
       <!DOCTYPE 루트 엘리먼트
       [
       <!ELEMENT 루트 엘리먼트(1차하위엘리먼트 목록)>
       <!ELEMENT 1차 하위엘리먼트(2차하위엘리먼트 목록)>
       <!ELEMENT 2차 하위엘리먼트(#PCDATA)>
       <!ATTLIST 2차 하위엘리먼트
                 속성이름 속성값 필수여부
                 ...>
       ]>
       
       ==> xml 문서에 대한 설계과정
       //-- 대상문서는 위의 명세부와 같이 규칙을 잘 준수해서 만들어졌어! 하고 알려주거나
       //-- 만들 때 이러한 규칙을 지켜서 만들거라는 가이드가 될 수도 있다.
       
    ○ DTD 와 XML 문서의 결합
       
       - 별도의 『.dtd』 파일을 작성한 후에 XML 문서와 연결
       
       // note.xml
       <?xml version="1.0" encoding="UTF-8"?>
       <!DOCTYPE note SYSTEM "Note.dtd">
       <note>
       		<to>Tove</to>
       		<from>Jani</from>
       		<heading>Remainder</heading>
       		<body>Do not forget me this weekend!</body>
       </note>
       
       // Note.dtd
       <!DOCTYPE note							//-- 루트 엘리먼트 note
       [
       <!ELEMENT note (to,from,heading,body)>	//-- 루트 엘리먼트 하위에 ( ) 가 있다.
       <!ELEMENT to (#PCDATA)>					//-- to 엘리먼트 하위에 (  ) 가 있다.
       <!ELEMENT from (#PCDATA)>
       <!ELEMENT heading (#PCDATA)>
       <!ELEMENT body (#PCDATA)>
       ]>
       
       - xml 문서 내부에 삽입 //-- 임베디드 방식
       
       
       // note.xml
       <?xml version="1.0" encoding="UTF-8"?>
    
       <!DOCTYPE note
       [
       <!ELEMENT note (to,from,heading,body)>
       <!ELEMENT to (#PCDATA)>
       <!ELEMENT from (#PCDATA)>
       <!ELEMENT heading (#PCDATA)>
       <!ELEMENT body (#PCDATA)>
       ]>
       
       <note>
       		<to>Tove</to>
       		<from>Jani</from>
       		<heading>Remainder</heading>
       		<body>Do not forget me this weekend!</body>
       </note>

    XML 문서 작성 방법
    ■■■ XML 문서의 기본 작성 및 관찰 ■■■
    
    ※ 문법적으로 기본 요건을 충족한 XML 문서를 『well-formed XML』 이라고 한다.
    
    - 루트 엘리먼트 이름은 .xml 파일 이름과 동일한 이름 사용
    - 루트 엘리먼트는 하나만 사용
    - 정보를 표현할 수 있는 구조화된 문서 작성
    - 복수(다수)의 데이터를 표현하는 경우 중간에 적절한 부모 태그 지정
    - 동일한 이름을 가진 엘리먼트인 경우 적절한 속성과 속성값 부여
    - 엘리먼트 하위에는 엘리먼트(또는 데이터)만 구성
    - 특수문자가 포함된 데이터인 경우 『CDATA 섹션』 으로 처리
    
    <tel>010-1234-1234</tel>
    → <tel><![CDATA[010-1234-1234]]></tel>
    
    <email>study@test.com</email>
    → <email><![CDATA[study@test.com]]></email>

    XmlApp02
    - DTD 추가
    • memberList.xml
    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- DTD 추가 -->
    <!DOCTYPE memberList 
    [
    <!ELEMENT memberList (memberInfo+)>
    <!ELEMENT memberInfo (name, telephone, curriculumn?, zipcode, addr)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT telephone (#PCDATA)>
    <!ELEMENT curriculumn (sub+)>
    <!ELEMENT sub (#PCDATA)>
    <!ELEMENT zipcode (#PCDATA)>
    <!ELEMENT addr (#PCDATA)>
    <!ATTLIST memberInfo mid CDATA #IMPLIED>
    ]>
    <!-- #REQUIRED : 이 속성값은 반드시 명시되어야한다. -->
    <!-- #IMPLIED  : 이 속성값은 명시되기도 하고, 명시되지 않기도 한다. -->
    <!-- #FIXED    : 이 속성값은 특정값으로 고정되어 사용된다. -->
    
    <!--
    	해당 값이 다수개 있을 때 + 를 붙인다.
    	공통적인 사항이 아닌 경우에는 ? 를 붙인다. 
    	CDATA 는 엘리먼트가 아니다!
    	속성을 가지고 있는 경우에는, 
    	ATTLIST 엘리먼트이름 속성이름 데이터타입(엘리먼트 사이가 아니면 CDATA) 속성값의타입
    	(속성값 타입은 위를 참조.)
    	ATTLIST 의 위치는 가장 아래쪽에 위치를 하는것이 일반적이고,
    	해당 속성을 가지고 있는 ELEMENT 아래에 속성을 표현해주는 것도 가능은 하다.
    -->
    
    <memberList>
    	<memberInfo mid="1">
    		<name>SI</name>
    		<telephone><![CDATA[010-1234-1234]]></telephone>
    		<curriculumn>
    			<sub>JAVA SE</sub>
    			<sub>ORACLE</sub>
    			<sub><![CDATA[Servlet&JSP]]></sub>
    		</curriculumn>
    		<zipcode>12345</zipcode>
    		<addr>Mapogu, Seoul</addr>
    	</memberInfo>
    	
    	<memberInfo mid="2">
    		<name>JB</name>
    		<telephone><![CDATA[010-1234-1234]]></telephone>
    		<zipcode>23455</zipcode>
    		<addr>Gangseo-gu, Seoul</addr>
    	</memberInfo>
    </memberList>

    XmlApp03
    - HTML 로부터 데이터 분리 (Ajax xml 처리)
    • koreanMajorCities.xml
    <?xml version="1.0" encoding="UTF-8"?>
    
    <koreanMajorCities>
    	<city>
    		<name>서울</name>
    		<class>특별시</class>
    	</city>
    	<city>
    		<name>부산</name>
    		<class>광역시</class>
    	</city>
    	<city>
    		<name>인천</name>
    		<class>광역시</class>
    	</city>
    	<city>
    		<name>대전</name>
    		<class>광역시</class>
    	</city>
    	<city>
    		<name>광주</name>
    		<class>광역시</class>
    	</city>
    	<city>
    		<name>울산</name>
    		<class>광역시</class>
    	</city>
    	<city>
    		<name>수원</name>
    		<class>시</class>
    	</city>
    	<city>
    		<name>청주</name>
    		<class>시</class>
    	</city>
    	<city>
    		<name>목포</name>
    		<class>시</class>
    	</city>
    </koreanMajorCities>

    • XmlApp03.html
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>XmlApp03.html</title>
    <style type="text/css">
    	table, th, td
    	{
    		border: 1px solid gray;
    		border-collapse: collapse;
    	}
    </style>
    
    <script type="text/javascript">
    	
    	function loadDoc()
    	{
    		// 확인
    		//alert("함수 호출 확인");
    		 
    		var xmlHttp = new XMLHttpRequest();
    		xmlHttp.onreadystatechange = function()
    		{
    			if (this.status==200 && this.readyState==4)
    			{
    				// 업무처리
    				displayData(xmlHttp);
    			}
    		}
    		
    		xmlHttp.open("GET","koreanMajorCities.xml", "true");
    		xmlHttp.send("");
    		
    	}
    	
    	// 업무 처리
    	function displayData(xmlHttp)
    	{
    		var xmlObj, cityList, result, idx;
    		
    		xmlObj = xmlHttp.responseXML;		//-- 요청한 데이터를 XML DOM 객체로 반환
    		result = "<table><tr><th>도시이름</th><th>행정구역</th></tr>";
    		
    		cityList = xmlObj.getElementsByTagName("city");
    		for (idx = 0; idx < cityList.length; idx++)
    		{
    			result += "<tr><td>"
    				+ cityList[idx].getElementsByTagName("name")[0].childNodes[0].nodeValue
    				+ "</td><td>"
    				+ cityList[idx].getElementsByTagName("class")[0].childNodes[0].nodeValue
    				+ "</td></tr>";
    		}
    		
    		result += "</table>";
    		
    		document.getElementById("text").innerHTML = result;
    	}
    
    </script>
    
    </head>
    <body>
    
    <div>
    	<h1>HTML로 부터 데이터 분리(관찰)</h1>
    	<hr />
    </div>
    
    <div>
    	<button type="button" onclick="loadDoc()">XML 데이터 불러오기</button>
    	<p id="text"></p>
    </div>
    
    </body>
    </html>
    728x90
Designed by planet-si