본문 바로가기
카테고리 없음

Valid XML vs Well-formed XML

by 왕 달팽이 2019. 7. 8.
반응형

XML 문서의 형식을 이야기할 때 'Well-formed XML'과 'Valid XML'이라는 구분을 하게 된다. Well-formed와 Valid는 어떻게 다른지 정리를 할 필요가 있다. 

1. Well-formed XML

XML은 W3C(Workdl Wide Web Consortium)이 정해놓은 표준이다. XML 표준을 보면 XML 문서가 어떻게 작성되어야 하는지 기술하고 있다. XML 문서는 반드시 하나의 루트 엘리먼트로부터 시작되어야 하며, 태그 이름은 숫자로 시작할 수 없고 정해진 문자만 포함할 수 있다는 등의 내용이 정리되어있다.

 

XML에 포함되어 있는 데이터의 내용과 상관없이 XML 문법만 잘 지켜지면 'Well-formed XML'이라고 할 수 있다.

2. Valid XML

'Valid XML'은 'Well-formed XML'에서 한 단계 더 나아간 개념이다. XML 문서는 DTD(Document Type Definition) 혹은 XSD(XML Schema Definition)를 포함할 수 있다. 이들은 XML에서 특정 태그가 가질 수 있는 값을 정의하는 스키마 정의 언어다. 예를 들어 "<month> 태그는 1 ~ 12 사이의 숫자를 가질 수 있다." 같은 내용을 명시할 수 있다.

 

'Valid XML'은 'Well-formed XML'이면서 XML에 포함되어 있는 DTD나 XSD를 모두 만족하는 XML이다.

 

예를 들어보자. 다음과 같은 XSD 정의가 있다고 해보자.  

<?xml version=“1.0” encoding=“UTF-8” ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name=“month”>
    <xs:simpleType>
      <xs:restriction base=“xs:integer”>
          <xs:minInclusive value=“1”>
          <xs:maxInclusive value=“12”>
      <xs:restriction> 
    </xs:simpleType>
  </xs:element>
</xs:schema>

XSD 정의를 설명하자면 'month'라는 XML 엘리먼트는 최소 1, 최대 12의 정수(integer) 값을 가질 수 있다는 의미다. 따라서 이 XSD가 적용되어있는 XML에서 month 태그는 1부터 12까지의 값을 가질 수 있다.

 

따라서 위 XSD 정의하에서는 다음 XML은 Valid XML이 아니다.

<month>13</month>

다음 XML은 Valid XML이다.

<month>12</month>

위 두 XML 모두 XML 문법은 지켰기 때문에 'Well-formed XML'이다. 

 

대부분의 오픈소스 XML 파서나 사용 XML 파서에는 XML 파서에는 XML의 Validity를 체크할 수 있는 기능들이 있다. 혹은 'Online-XSD-Validator' 같은 키워드를 이용해서 DTD, XSD 스키마 정의와 함께 XML을 입력하여 Valid 여부를 판별할 수 있는 페이지들도 많다.

반응형

댓글