공공데이터의 형식
CSV; Comma-Seperated Value
XML; eXtensible Markup Language
- 구조적임
- 태그 등 문법을 알아야 됨
- 태그에 의해 용량이 커짐
JSON; JavaScript Object Notation
- JavaScript에서 객체를 표현하는 방법
- JSON을 많이 쓰지만 가끔 XML만 가능한 경우도 있음
XML
Vs. HTML
- 필요에 따라 태그를 확장할 수 있음(extensible)
- Well formed: 문법을 정확히 지켜야 동작함
HTML은 사실 대충 써도 그림은 띄워짐
기본 문법
- 문서의 시작은 반드시
<?xml version="1.0" encoding="UTF-8"?>
와 같이 버전과 encoding이 명시되어야 한다.
- root element가 존재해야 하며, 나머지 태그는 tree 형태로 구성된다.
- 시작 태그와 종료 태그는 일치해야 한다.
- 시작 태그는 key-value 구조로 속성을 가진다:
attr="value"
- 태그는 대소문자를 구별한다.
<?xml version="1.0" encoding="UTF-8"?>
<ssafy>
<student no="12345">
<name>홍길동</name>
</student>
</ssafy>
validity
- valid하다 = 최초 작성자의 의도대로 작성되었다
- 문서의 구조, 적절한 요소, 속성 개수, 순서가 잘 지켜졌는가?
- DTD나 Schema로 문서의 규칙을 작성하고, 이 규칙을 잘 따라 XML 문서가 valid하다고 할 수 있다.
- 데이터 송신, 수신 측에서는 DTD, Schema로 data validation 수행한다.
DTD; Data Type Definition
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT ssafy(student*)>
<!ATTLIST studnet no CDATA "0">
<!ELEMENT student (name, loc, phone?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT loc (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT ssafy(student*)>
: root element
student*
wildcard: 여러 개
CDATA
Character DATA
phone?
wildcard: 있어도 되고 없어도 되고(optional)
#PCDATA
- Parsed Char DATA: XML 문서가 parsing해서 쓰는
CDATA
- 즉 CDATA에는
"12<45"
해도 되지만 PCDATA에서는 <
를 태그의 기호로 인식하게 된다.
XML parsing
- SAX parser
- Simple API for XML parser
- XML 문서를 메모리에 적재하지 않는다.
- 문서를 읽으면서 시작 태그, 종료 태그를 이벤트로 간주해 처리한다.
- 그래서 빠르다.
- 그래서 다양한 탐색이 어렵다.
- DOM parser
- Document Object Model parser
- XML 문서를 메모리에 적재한다.
- 문서를 다 읽은 후 문서 구조 전체를 자료구조에 저장해 탐색한다.
- 그래서 느리다(큰 문서 처리는 어려움).
- 그래서 다양한 탐색에 좋다.
SAX parser
events
startDocument()
startElement()
characters()
endElement()
endDocument()