What's XML?
XML은 Extensible Markup Language의 약자입니다. 한마디로 다목적 마크업 언어이다.
XML은 인터넷이 연결된 서비스끼리 데이터를 용이하게 전달하기 위해 개발되었다.
XML은 웹사이트, 데이터베이스, SOAP 통신 프로토콜 등 많은 곳에서 사용된다.
XML의 선언
XML 문서는 자신에 대한 정보를 일부 선언하는 것으로 시작된다.
<?xml version=”1.0” encoding=”UTF-8” ?>
와 같이 선언된다.
XML의 문법
HTML과 같이 태그 형식의 문법을 사용한다.
태그에는 대소문자가 다르면 다른 요소로 인식한다.
XML은 띄어쓰기를 인식한다.
XML의 간단한 예시
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<note>
<name>
<firstname>CHOI</firstname>
<secondname>BOKYU</secondname>
</name>
</note>
XML의 Entity
엔티티는 XML에서 특정 문자를 대체하는 역할을 합니다.
엔티티는 일반적으로 &
로 시작하고 ;
로 끝나는 이름으로 표현됩니다.
XML에서는 아래와 같이 내장 엔티티를 지원합니다.
&
: & (ampersand) 문자를 나타냅니다.<
: < (less than) 문자를 나타냅니다.>
: > (greater than) 문자를 나타냅니다."
: " (double quote) 문자를 나타냅니다.'
: ' (apostrophe 또는 single quote) 문자를 나타냅니다.
=
= a 와 같이 hex을 통해서 문자를 표기 할 수 있습니다.
<!ENTITY ADDRESS “8.8.8.8”>
라고 선언하고 &ADDRESS;
로 참조해서 사용할 수 있습니다.
엔티티는 외부 데이터를 가져와서 참조시킬 수 있습니다.
<?xml version="1.0"?>
<!DOCTYPE example [
<!ENTITY localFile SYSTEM "file:///path/to/externalFile.txt">
<!ENTITY externalResource SYSTEM "https://example.com/resource.txt">
]>
<example>
<content>
Local File Content: &localFile;
<br/>
External Resource Content: &externalResource;
</content>
</example>
XML의 DTD
Document Type Definition의 약자로 XML의 구조를 정의하고 검사하는 방법을 제공합니다.
또한 DTD에도 ENTITY 선언이 가능합니다.
아래는 DTD의 사용 예시입니다.
<?xml version="1.0"?>
<!DOCTYPE addressbook SYSTEM "addressbook.dtd">
<!DOCTYPE test [!ENTITY testing "test"]>
<addressbook>
<contact id="1">
<name>John Doe</name>
<email>[email protected]</email>
<phone>123-456-7890</phone>
</contact>
<contact id="2">
<name>&admin;</name>
<email>[email protected]</email>
<phone>987-654-3210</phone>
</contact>
</addressbook>
<test>
<bar>&testing;</bar>
</test>
<!ELEMENT addressbook (contact+)>
<!ELEMENT contact (name, email, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ATTLIST contact
id ID #REQUIRED
>
<!ENTITY admin "admin">
XML파일이 DTD에 준수하는지 확인할 수 있습니다. 만일 구조가 일치하지 않다면 오류 메세지를 내보냅니다.
💡 (#PCDATA)
<!ELEMENT name (#PCDATA)>
이런식으로 elment 선언이 되었다면
element name의 #PCDATA는 텍스트 데이터를 의미합니다.
DTD 내부에서만 ENTITY를 사용할 땐 파라미터 ENTITY를 사용해야 된다.