XML(Extensible Markup Language)
XML 구문은 매우 간단하고 구조적이어서 익히기 쉽고 사용하기 쉽다
간략 요약
XML 선언법
1. XML문서의 맨 앞에 선언해야된다
2. 맨 앞에 적은 <xml>태그를 XML 프롤로그라 하며, 이때 사용하는 xml 태그는 소문자로만 적는다
XML Prolog(프롤로그)
1. 버전을 명시한다
2. 문자 인코딩을 설정하며, 기본값은 UTF-8이다
3. 파싱할 외부 문서 여부를 설정할 수 있다
상세 내용
XML 문법
1. 모든 요소의 부모요소인 root element를 하나만 갖는다
2. 모든 xml 태그는 닫는 태그가 필요하다
3. 태그는 대소문자를 구별한다
4. 상위 단계의 태그보다 하위 단계의 태그가 먼저 닫힌다
5. 태그의 값은 따옴표(")로 감싸야 된다
6. html과 달리 띄어쓰기를 인식한다
XML 기초
XML 문서들은 모든 elements들의 부모 요소인 root element를 하나만 가져야 한다
모든 XML 태그들은 닫는 태그가 필요하다
태그들은 대소문자를 구별하며(case sensitive) 부모 태그는 자식태그보다 나중에 닫는다
예시)
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
<p><strong>이 구문은 오류를 발생합니다.</p></strong>
<p><strong>이 구문이 정확한 순서입니다.</strong></p>
※<p>가 부모태그라면 <strong>이 자식태그로, <strong>태그가 먼저 닫혀야된다
아래의 XML 구문에서 root element는 note 이다
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
태그의 값은 따옴표로 감싸주어야한다
<student name=abc> // 오류
<student name="abc"> // 정상
몇개의 문자열들은 xml 태그 내에서 사용할 때, 이스케이프가 필요하다
xml escape | 기호 | 의미 |
< | < | 보다 작다 |
> | > | 보다 크다 |
& | & | 그리고 |
' | ` | ' |
" | " | 따옴표 |
활용 예시
<message>salary < 1000</message>
<!-- salary < 1000 -->
주석은 html 문서와 같이 <!-- -->를 사용한다
<!-- 올바른 주석 -->
주석 중간에 하이픈2개를 연달아 쓰면 안된다
<!-- 올바르지 않은 -- 주석 -->
XML 프롤로그
다음과 같은 표현을 XML prolog(프롤로그) 라고 한다
<?xml version="1.0" encoding="UTF-8"?>
XML1.0 버전에서의 XML prolog는 필수사항은 아니며, 만약 사용하고자 한다면 문서의 맨앞에 적어야 한다
XML prolog는 XML 선언, 처리 지시사항들, 주석과 문서 타입 정의에 관한 내용들이 포함된다
XML 1.1 버전은 XML 선언을 필수로 해줘야한다 선언이 없다면, 1.0버전으로 인식하게된다
XML문서의 시작부터 루트 노드이전까지의 모든 것이 XML의 prolog이다
XML 문서는 전세계언어를 포함하고 있어
노르웨이나 프랑스어의 øæå, êèé 와 같이 악센트 표기가 가능한 알파벳을 사용할 수 있다
아래의 XML 구문은 1.1버전이지만
<?xml version="1.1"?>
<greeting>Hello, world!</greeting>
아래의 버전은 XML 선언이 없으므로 XML 1.0버전이다
<greeting>Hello, world!</greeting>
예시와 설명을 곁들인 버전
다음은 PDS4 코어 네임스페이스를 참고한 샘플 프롤로그이다
<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1201.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1100.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<?xml-model href="http://pds.nasa.gov/pds4/sp/v1/PDS4_SP_1100.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<?xml-model href="http://pds.nasa.gov/pds4/geom/v0/PDS4_GEOM_0520.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<?xml-model href="http://pds.nasa.gov/pds4/sbn/v0/sbnDD_0100.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<?xml-model href="http://pds.nasa.gov/pds4/mission/epoxi/v0/epoxiDD_0100.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
첫번째 줄은 XML 선언으로 이용하려는 XML의 버전과 문자열 인코딩 방식을 보여준다
XML 선언은 XML 문서의 맨 앞줄에 적어야 하며, 프롤로그의 <xml> 태그는 소문자로 사용해야한다
추가로 XML 선언 시 standalone 을 추가할수있다
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
standalone의 기본값은 no이며,
standalone은 외부 DTD(Document Type Definition)와 같이
외부 소스의 데이터에 의존하는 문서인지 XML 파서에게 알려주는 역할을 한다
yes인 경우, 문서를 파싱할 때 참조해야할 외부 소스가 있다는 것을 의미
마지막으로 XML 프롤로그 내, 따옴표 안에서의 공백은 피해야하며, 따옴표 바깥의 공백은 걱정하지 않아도 된다
※여기서의 공백은 스페이스 바를 사용한 한칸 띄워쓰기, tab을 이용한 들여쓰기,
그리고 \n을 이용한 줄바꿈을 의미한다
따라서 다음과 같은 xml은 올바른 사용 예시임
<?xml
version="1.0"
encoding="UTF-8"
standalone="no"?>
참고 사이트
XML 구문 기초
https://www.w3schools.com/xml/xml_syntax.asp
http://www.tcpschool.com/xml/xml_basic_syntax
https://sbnwiki.astro.umd.edu/wiki/Anatomy_of_the_XML_Prolog
XML 특수문자 사용
https://docs.microsoft.com/ko-kr/dotnet/desktop/wpf/advanced/how-to-use-special-characters-in-xaml?view=netframeworkdesktop-4.8
XML 전반적인 설명
https://support.microsoft.com/ko-kr/office/%EC%B4%88%EB%B3%B4%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-xml-%EC%84%A4%EB%AA%85-a87d234d-4c2e-4409-9cbc-45e4eb857d44
XML 선언 prolog 규칙 설명
https://stackoverflow.com/questions/7007427/does-a-valid-xml-file-require-an-xml-declaration
standalone 설명
https://stackoverflow.com/questions/5578645/what-does-the-standalone-directive-mean-in-xml