ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Web] XML, DTD, DOMParser 란?
    Web/JavaScript 2019. 6. 27. 13:23

    XML(eXensible Markup Language)은 1996년에 생겼다. 

    xml은 서버 설정을 하는 용도이고 데이터를 담는 문서이다. 

    html은 정해진 태그만 사용할 수 있는 반면 XML은 customTag 사용이 가능하다.

     

    1. 기존내용에 추가적인 정보를 표시하는 용도

    2. 스타일은 지정해서 폰트의 모양을 바꾸는 용도

     

    version을 적지 않으면 아래 태그들이 없는것과 동일하다.

    version encoding순서를 차례대로 정의해야 한다.

     

    제외문자 --> <  ,  &  ,  ]]>  , [^<&]*

    왜? 예약된 문자기이기 때문이다.

     

    XML 문법 정리

    well-formed (문법에 맞게 잘 구성된) XML문서

    1. 문서안에 최소 한개 안의 element를 가져야 한다. 단, 시작 끝태그를 적어줘야한다.

    2. 문서 전체를 감싸는 한 개의 엘리먼트 (Root Element) 가 존재해야함.

       즉, 두개 태그 이상일때는 하나로 감싸는 Root Tag가 필요하다.

    3. 시작태그가 있다면 그것에 매핑되는 끝태그가 반드시 존재해야 한다.

    4. XML은 대소문자를 구분한다.

    5. 엘리먼트는 포함관계가 꼬이면 안된다. 왜? 형제 엘리먼트도 있다.

    6. xml선언은 전체 생략 가능하나 선언하는 것을 권장한다.

    version속성 - encoding속성 순으로 입력 , <?xml 앞에 스페이스 쓰면 절대 안됨

    7. 태그의 내용에 제한된 문자가 있다. (  & , < , ]]>  )

    해결방법1. replace('<' , '&lt;')

    해결방법2. CDATA섹션을 사용

    <![CDATA[ 이곳은 데이터 문자만 표현하는 영역입니다. < & ]]>

    8. 속성값에 제한된 문자 ( & , <)

    9. 속성값은 반드시 인용부호( ' ' , " ")를 사용

    ex. html은 인용부호를 넣지않아도 실행된다.

    10. 서로다른 속성은 반드시 공백을 통해 구분한다.

    11. 주석문( 설명문, comment)에 제한된 문자

    12. 주석도 xml의 요소이다.

    13. xml을 잘못하면 사스파서 에러가 난다.

     

    태그 <> 란?

    속성 값이 짝으로 이루어져 있다.

    다른 언어를 기술하기 위한 언어이다.

     

    semantic markup(시멘틱 마크업)

    내용이 마크업의 이름에 명시적으로 표시되어 있다.

     

    csv

    컴마(comma, 구분자)를 사용하여 자료를 분리하는 것. 단, 자료의 의미가 존재하지 않는다.

     

    DTD(Document Type Definition) 란?

     문서 작성 규칙이다.

    XML문서내에 출현할 엘리먼트, 속성의 종류, 순서, 데이터의 종류를 정의

     

    DTD , XMLSchema는 동시에 선언할 수 없다.

     

    DTD에 정의되어 있는 태그만 사용 가능하다.

    xml을 만드려고 DTD를 만든다.

     

    ex. 숫자는 다섯개만 와야 합니다.

    <?xml version ="1.0" ?>
    
        DTD선언
    
    <root>
    
    </root>
    
    
    
    XMLSchema
    
    <?xml version ="1.0" ?>
    
    <root 스키마 선언>
    
    </root>

    XML Schema

    DTD와 같은 개념(XML문서의 형식: 문서내에 어떤 태그와 속성을 사용할 것인지 정의)

    (업그레이드 된 DTD)

    - 여러 자료형을 정의 할 수 있다.

    - 태그의 출현 횟수를 정의하는 것이 편리하다.

    ex. DTD를 통해 root태그내에 자식태그<a>가 최소 1~ 최대 5번

    <!ELEMENT root (a,a?.a?.a?.a?)>

    ex. Schema에서는 속성 minOccur를 사용한다.

    minOccurs="1" maxOccurs="5"

     

    확장자 .xsd

    xml문법을 사용

    작성법

    1. simpleType정의 - 태그내의 자료형(숫자,문자,날짜) 정의

    2. complexType 정의 - 태그내의 자식요소 정의

     

    xml만들때 하나의 dtd나 하나의 스키마만 참고 가능하다.

     

    하나의 xml문서 태그에 같은 이름의 태그가 두개 존재할때

    prefix( 태그의 이름의 속성 ex. class안의 이름)

    xmlns: xml name space <-- namespace - 이름충돌방지(package)

     

    DOM & SAX Parser (돈파서 사스파서)

    Document ,Element, NamedNodeMap, Node(최상위부모), NodeList 중요

    DOM의 정체? 파서Parser(분석기) - Document Object Model

       ex) 날씨 rss정보를 가져올 수 있다.

    DOM은 트리구조이다.(트리== 메모리)

    메모리를 전부 끌어와서 파일 카피가 된다. 분석가능

    스페이스바 엔터도 요소로 본다.

     

    SAX의 정체? 파서Paser

    event(사건)기반 분석 빠르다.

    사건 == 미팅, 

    태그  - 텍스트 자체

    엘리먼트 - 태그안의 모든 자식 요소들

     

    DOM Parser vs SAX Parser

    위 둘의 차이점은 데이터 조회수정삭제의 편리성이다.

     

    DOM의 경우 프로그램 올려있는동안 수정삭제가 편하다. 실시간 반영 반영이 된다. 대부분 DOM Parser를 사용한다.

     

    하지만 SAX의 경우 조회 수정 삭제 시마다 이벤트 발생을 시켜야 한다. 분석이 빠르다는 장점이 있어, 웰폼드 에러 체크할때 빨리 훝어 보는 용도로 사용한다.

     

    참고.

    SAX ( The Simple API for XML ) 

    Parser가 하는 일

    Event - based API 제공, Collback함수(addActionListner)

            - xml이 태그들을 분석한다.

    Tree-based

             - 처음부터 끝까지 다 읽는다.

             - 빠른처리를 한다. 큰 문서에 적합하다.

     

    Node

    1. Node자체의 정보를 얻거나 정하는 메소드

    2. Node를 조작하는 메소드

    getNodeName()

    getNodeType()  - 자바에 정수를 표현하는 자료형

    hasChildnodes() - 자식이 무자식인지

    hasAttributes() - 속성을 가지고 있는지

    Node appendChild(new Child) - Child를 할때, 

    getFirstChild() - 첫번째 자식 가져오기

    getNextSibling() - 다음 형제 가져오는것 (없으면 null)

    getPreviousSibling() -  이전 형제 가져오는 것

    NodeList getElemetsByTagname - 자바의 arraylist를 생각하면 된다.

    Int getlength()

    Node item(int index)

    Nodemap에는 attribute만 들어간다.

     

    DocumentBuilderFactory - DocumentBuilder(xml문서 파씽) - Document  <-- 여기까지 구하면 된당

     

    Well-Formed문서 - spac에 맞춘 문서 - 적격한 문서

    이곳에 + option(DTO)을 줄 수 있는데 

    DTD, xml스키마 이외의 형식으로 태그를 만든다면 그건 notValied하다.

    xml의 버전은 1.0, 1.1두가지 이다.

     

    속성정의

    attribute 속성명 자료형 xxxxxxxxxxxxxxx안되요!

    속성은 독립적으로 표현될 수 없고 반드시 엘리먼트에 종속적이기 때문에 엘리먼트와 함께 정의를 해야 함.

     

    CDSect ***************************  ![CDATA[]] 아주아주아주 중요하다.

    Caracter Data Section 문자 데이터를 표현하는 영역

     

    태그 해석을 하지 않고 텍스트(character)문자, 데이터로 인식하겠음.

    왜? xml <  ,  &  ,  ]]>  , [^<&]* 가 예약어이기 때문이다.

    ex.

    <mapper>
    
       <select id="selemp"><![CDATA[
                  select ....... where sal< 2000
       ]]</select>
    
    </mapper>

     

     

     

     

     

     

     

    반응형

    댓글

Designed by Tistory.