HTML 과 매우 비슷한 문자 기반의 마크업 언어로, 데이터들 저장하고 전달할 목적으로 만들어진 언어이다.
1998년 W3C 표준 권고안에 포함되었다. 웹브라우저 간 html 문법이 호환되지 않는 문제와
SGML의 복잡함을 해결하기 위해서 개발된 마크업 언어이다.
XML은 데이터를 저장하고 전달할 목적으로 만들어졌으며, 저장되는 데이터의 구조를 기술하기 위한 언어입니다.
XML은 eXtensible Markup Language의 약자로,
수많은 응용 분야에서 데이터를 저장하고 전달하는 중요한 역할을 맡고 있습니다.
XML은 문서용 마크업 언어를 정의하기 위한 메타언어인 SGML(Standard Generalized Markup Language)을 기반으로 만들어졌습니다.
XML을 기반으로 하는 대표적인 언어는 다음과 같습니다.
DTD에서는 모든 XML 문서가 다음과 같은 구성 요소로 이루어져 있다고 봅니다.
//문법
<?xml version="1.0" encoding="UTF-8" ?>
<태그이름 속성="값" 속성="값"></태그이름>
<?xml version="1.0" encoding="UTF-8" ?>
<shop city="서울" type="마트">
<food>
<name>귤</name>
<sort>과일</sort>
<cost>1000</cost>
</food>
<food>
<name>상추</name>
<sort>야채</sort>
<cost>2000</cost>
</food>
</shop>
DTD에서 요소(element)란 XML 문서를 구성하는 가장 중요한 구성 요소입니다.
<!ELEMENT 요소이름 요소카테고리>
또는
<!ELEMENT 요소이름 (요소내용)>
DTD에서 속성은 요소에 대한 추가적인 정보를 제공하며, 해당 요소의 특징을 정의합니다.
<!ATTLIST 요소이름 속성이름 속성타입 속성값>
XML에서는 예약되어 있는 다섯 개의 특별한 기호가 있습니다.
이렇게 예약되어 있는 기호를 XML 문서에서 사용하면 XML 파서는 그것을 전혀 다른 의미로 해석합니다. 따라서 이렇게 예약된 기호를 기존에 사용하던 의미 그대로 사용하기 위해서 만든 문자셋을 엔티티(entity)라고 합니다.
<!ENTITY 엔티티이름 "엔티티값">
또한, 문서 외부에 존재하는 외부 엔티티는 다음과 같이 SYSTEM 키워드를 사용하여 선언할 수 있습니다.
<!ENTITY 엔티티이름 SYSTEM "URI또는URL">
PCDATA(Parsed Character DATA)란
XML 파서에 의해 분석될 문자 데이터를 의미합니다.
간단히 말해 XML 요소의 시작 태그와 종료 태그 사이에 위치한 텍스트를 PCDATA라고 생각하면 됩니다.
PCDATA는 XML 파서가 엔티티(entity)와 마크업(markup)으로 나누어 분석합니다.
이렇게 XML 파서에 의해 분석될 문자 데이터만을 가지는 요소는
요소의 내용을 #PCDATA로 명시하여 선언합니다.
<!ELEMENT 요소이름 (#PCDATA)>
CDATA(Character DATA)란 XML 파서가 분석하지 않는 문자 데이터를 의미합니다. DTD에서 요소의 콘텐츠에는 PCDATA만이 올 수 있으며, 속성의 속성값으로는 CDATA만이 올 수 있습니다.
<!ATTLIST 요소이름 속성이름 CDATA 속성값>
[JSON(JavaSCript Object Notation)]
쉽게 데이터를 교환하고 저장하기 위하여 만들어진
텍스트 기반의 데이터 교환 표준이다.
자바스크립트 언어로부터 파생되어 자바스크립트 구문 형식을 따르지만
또다른 데이터 형식을 말한다.
특징으로는 매우 유연하게 정보를 저장, 구조화할수 있다.
속성과 값으로 이루어진 데이터 오브젝트를 전달하기 위해서 사용되는
개방형 표준 포맷이다.
AJAX에서 많이 사용되며, XML을 대체하는 데이터 포맷이다.
JSON은 다음과 같은 특징을 가집니다.
[{ },{ },{ }]
{
"변수명":"데이터",
"변수명":[
"값1",
"값2",
"값3"
],
"변수명":{
"변수":데이터1,
"변수":데이터2,
"변수":데이터3
}
}
1. 문자 : ""
2. 숫자
*변수이름 한글 안됨,영문자로 시작한다
{
"변수명":"데이터",
"배열명":[
"값1",
"값2",
"값3"
],
"다중배열?":{
"변수":"데이터",
"변수":"데이터",
"변수":"데이터"
}
}
{
"이름":"홍길동",
"나이":25,
"성별":"남",
"특기":["무술","활쏘기"],
"가족관계":{"어머니":"월매","아버지":"홍검사"}
}
이름을 찾으면 홍길동이 나오고
나이는 25
특기는 배열로 반환이 된다.
특기[0] = 무술
특기[1] = 활쏘기
가족관계는
가족관계의 아버지 는 홍검사
가족관계의 어머니 는 월매
* 주의 사항 : 한글 변수는 사용할수 없음... 영문자로 시작되어야함
예제)
{
"name":"여자친구",
"members":[
"소원",
"예린",
"은하",
"유주",
"신비",
"엄지"
],
"albums":{
"s1집":"season of glass",
"s2집":"flower bud",
"s3집":"snowflake"
}
}