Web develop/JDBC_XML

[XML] XML 정의 및 구조

ForA 2019. 7. 10. 19:07
728x90

: eXtensible Markup Language (부가적인 마크업 언어)

  • XML ⇒ 데이터 저장방식. Standard Text Data
  • 어떤 플랫폼에서나 읽을 수 있는 포맷 제공, 고정된 형식이 아닌 확장이 가능한 언어
  • 태그를 사용자가 직접 정의할 수 있으며 그 태그를 다른사람들이 사용하도록 할 수 있다. 다른언어를 기술하기 위한 언어, 즉 메타언어이다.
  • 마크업: 원래의 내용에 특별한, 또는 추가적인 정보를 표시하는 모든 것을 의미.
    예) 밑줄, 색상, 폰트의 변화, 번호매기기 등등

XML 문서구조 형태

[XML선언]
<?xml version="1.0" encoding="UTF-8"?> 

[DTD]
<!DOCTYPE root[
    <!ELEMENT root(#PCDATA)>]> 

[도큐먼트 인스턴스]
-- 엘리먼트 컨텐트
<시작태그>내용(데이터)</끝태그> 
<사람나이>23</사람나이>

-- 속성값
<시작태그 속성명="속성값"> 
<빈태그 속성명="속성값">
<사람 이름="나길동"> //나길동:데이터 , 이름:데이터에 대한 설명
  • 엘리먼트 컨텐트 : 태그명이 데이터에 대한 설명
  • 속성값: 속성명이 데이터에 대한 설명

DTD

  • Document Type Definition (문서 원형 정의) ⇒ 문서 작성 규칙
  • XML 문서 내에 출현할 엘리먼트, 속성의 종류, 순서, 데이터의 종류를 정의
  • XML 문서 구성시 선택적 사항이다.
  • XML 문서는 DTD를 포함하는지의 여부에 따라 구조적으로 정확한 문서인지, 또는 완전한 형식의 문서인지로 구분된다.

XML Schema

  • DTD와 같은 개념. 업그레이드된 DTD
    ⇒ 여러 자료형을 정의할 수 있다.( 사용자 정의 자료형 )
    ⇒ 태그의 출현 횟수를 정의하는 것이 편리

  • 객체의 클래스 특성을 정의하는 것으로, XML의 경우 스키마란 문서가 마크업되는 방식에 대한 정의를 뜻함

  • XML문서의 형식: 문서 내에 어떤 태그와 속성을 사용할 것인지 정의)

    선언위치)
    -DTD

    DTD선언위치

    -XMLSchema

    <root 스키마선언>

    예) DTD를 통해 태그 내에 자식태그 가 최소 1번, 최대 5번 출현하는 것을 정의

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

    => Schema에서는 속성 minOccurs="1" maxOccurs="5"

  • 주의) DTD 혹은 XMLSchema를 동시에 선언할 수 없다.

  • 확장자.xsd 사용, XML문법을 사용

  • 작성법)

  1. simpleType : 태그내의 자료형(숫자, 문자, 날짜) 정의
  2. complexType :태그내의 자식요소 정의

적격(Well-Formed)문서

  • 어떤 문서가 하나의 XML 문서로 간주되는데 필요한 최소한의 필수조건들의 집합을 의미.
  • 문법에 맞춘 문서. DTD를 가지지 않을 수도 있는 문서

유효한(Valid) 문서

  • 적격문서보다 더 엄격한 조건들을 준수해야함.
  • 모든규칙을 따르고, 반드시 DTD를 가져야 하며 해당 XML 문서에 연관된 DTD 정의를 지켜야 함

태그(엘리먼트) 정의

<!ELEMENT 태그명 (자식요소에대한 표현)>

<!ELEMENT person (x)>
=> <person> <x/> </person> //유효한 문서
=> <person> <x/> <x/> </person> //규칙 어김. 유효하지 않은 문서

<!ELEMENT person (x|y)>
=> x / y

<!ELEMENT person (x,y)>
=> x y

<!ELEMENT person x,y?>
=> x y / x

<!ELEMENT person (x,y)?>
=> x y / x / y / 전체생략가능 
  • <x/> ⇒ 빈태그
<!ELEMENT person (#PCDATA|TweetyElem|SylvesterElem)*>//순서에 상관없이. 생략가능
=> <!ELEMENT person (#PCDATA|name|age)*>

<!ELEMENT person EMPTY>
<!ELEMENT person ANY>
  • #PCDATA : 문자데이터를 사용
  • EMPTY : 내용이 없는것을 표시
  • ANY : 어떠한 종류의 내용도 허용

속성 정의

<!ATTRIBUTE 속성명 자료형> ==>오류발생.속성은 엘리먼트에 종속적이기 때문에 엘리먼트와 함께 정의해야함 

<!ATTLIST 태그명 
                                속성명1 속성자료형 추가특성
                                속성명2 속성자료형 추가특성
                                속성명3 속성자료형 추가특성>

<!ATTLIST mycar is_blue (yes|no) "yes"
                                brandname ID #REQUIRED
                                description CDATA #IMPLIED>

=>문서적용
<root>
    <mycar is_blue="no" brandname="gia" description="beautiful car"/>
</root>

<root>
    <mycar is_blue="yo" brandname="5gia" description="beautiful car"/>
</root>
=> 에러. 자바 연동시 SAXParseException 발생

XML Namespace

  • 이름 충돌 방지
  • URI로 식별되는 이름들의 집합

CSV

  • 콤마를 구분자로 하는 데이터

XML문서 Parser(분석기)

DOM

  • 방식: tree(메모리) 기반 분석

SAX

  • 방식: event(사건) 기반 분석