XML 스키마 (W3C)

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
XML 스키마 (W3C)
확장자 .xsd
MIME 종류 application/xml, text/xml
개발 월드 와이드 웹 컨소시엄
파일 포맷 종류 XML 스키마 언어
표준 1.0, 파트 1 구조 (권고)

1.0, 파트 2 자료형 (권고)
1.1, 파트 1 구조 (권고)
1.1, 파트 2 자료형 (권고)

XML 스키마는 2001년 5월에 W3C 표준으로 발표된[1] 여러 XML 스키마 언어 중 하나이다. 이는 W3C 권고를 만족하는 첫 번째 XML 스키마 전용 언어이다. XML 스키마와 W3C에서 구체적으로 지정한 것과 명칭이 같아 혼동이 되기 때문에, 사용자 커뮤니티 일부에서는 이 언어를 WXS라 칭하는데, 이는 W3C XML Schema의 앞 글자를 딴 것이다. 다른 이들은 XML Schema Definition의 약자인 XSD를 쓰기도 한다.[2][3] 버전 1.1에서 W3C는 XSD를 선호하는 이름으로 정했으며, 이 문서에서도 XSD라 부른다.

다른 모든 XML 스키마 언어처럼, XSD는 XML 문서가 그 스키마에 대하여 '유효'한 것으로 여겨지기 위해 반드시 지켜야 하는 규칙들의 집합을 표현하는 데 쓰인다. 그러나 다른 대부분의 스키마 언어들과 달리, XSD는 문서의 유효성 검증을 통해 특정 자료형들에 종속적인 정보들의 묶음을 만들어 내자는 의도로 설계되었다.

스카마들과 스카마 문서[편집]

스키마 문서는 네임스페이스(namespace)로 조직화된다: 모든 이름이 달린 스키마 구성 요소는 대상 네임스페이스에 속하며, 그 대상 네임스페이스는 스키마 문서 전체의 속성 중 하나이다. 스키마 문서는 네임스페이스가 같은 다른 스키마 문서를 포함할 수 있다. 또한 다른 네임스페이스의 스키마 문서를 불러 올 수 있다.

어떤 인스턴스 문서를 어떤 스키마에 대하여 유효성 검증할 때(assessment라 한다), 유효성 검증에 사용될 스키마는 유효성 검증 엔진에게 인자로 주어질 수도 있고, 인스턴스 문서 자체에서 직접 참조될 수도 있다. 인스턴스 문서가 참조할 때는 두 가지 특별한 애트리뷰트를 사용하는데, xsi:schemaLocationxsi:noNamespaceSchemaLocation이 그것이다. 관습적으로 "xsi"는 "http://www.w3.org/2001/XMLSchema-instance"를 가리키는 접두어로 쓰인다.)

XML 스카마 문서는 대개 확장자로 ".xsd"를 갖는다. XSD에 대한 고유의 MIME 타입은 아직 등록되지 않았다. 따라서 RFC 3023에 따라 "application/xml" 혹은 "text/xml"을 사용해야 한다.

스카마 요소들[편집]

스키마의 주된 요소들은 다음과 같다:

  • 요소 선언(Element declarations), 요소의 속성(properties)을 정의한다. 요소 이름과 대상 네임스페이스를 포함한다. 요소의 종류(type)가 중요한 속성으로, 요소가 어떤 속성과 자식(children)을 가질 수 있는 지를 제한한다. XSD 1.1에서, 요소 종류는 그 특성 값에 따라 달라질 수 있다. 요소는 대체 그룹(substitution group)에 속할 수 있다; 만약 요소 E가 요소 H의 대체 그룹에 속하면, 스키마가 H를 허용하는 곳 어디에나 E가 나타날 수 있다. 요소는 무결성 조건(integrity constraints)을 가질 수 있다: uniqueness constraints determining that particular values must be unique within the subtree rooted at an element, and referential constraints determining that values must match the identifier of some other element. 요소 선언은 전역(global)이거나 지역(local)일 수 있다. 따라서 인스턴스 문서(instance document)의 서로 다른 부분에서, 서로 관련이 없는 요소들을 가리키는 데 같은 이름을 쓸 수 있다.
  • 속성 선언(Attribute declarations), 속성의 속성을 정의한다. 여기서도 속성 이름과 대상 네임스페이스를 포함한다. 속성의 타입은 속성이 가질 수 있는 값을 제한한다. 속성 선언에 기본값을 지정하거나, 값을 고정할 수 있다.
  • 간단한 타입과 복잡한 타입. 다음 절에서 다룬다.
  • 델 그룹 과 속성 그룹 정의. 요소와 속성들의 이름 있는 매크로 다양한 형 선언에서 재사용될 수 있는 필수적인 매크로입니다.
  • An attribute use represents the relationship of a complex type and an attribute declaration, and indicates whether the attribute is mandatory or optional when it is used in that type.
  • An element particle similarly represents the relationship of a complex type and an element declaration, and indicates the minimum and maximum number of times the element may appear in the content. As well as element particles, content models can include model group particles, which act like non-terminals in a grammar: they define the choice and repetition units within the sequence of permitted elements. In addition, wildcard particles are allowed, which permit a set of different elements (perhaps any element provided it is in a certain namespace).

다른 더 특수화된 구성요소들로 주석(annotations), 표명(assertions), 표기법(notations), 스키마 전체에 대한 정보를 포함하는 schema component가 있다.

종류[편집]

복잡한 타입은 요소에 허용된 내용(content)을 기술하며, 거기에는 그것의 요소와 특성들과 텍스트 자식들을 포함한다. 복잡한 타입의 정의는 속성들의 집합과 내용 모형(content model)으로 이루어진다. consists of a set of attribute uses and a content model. 내용 모형에는 여러 가지가 있다. 요소-전용 내용은, 텍스트(공백이나, 자식 요소로 감싸진 텍스트는 제외)가 나타나지 않는 것이다; 간단한 내용은, 텍스트가 허용되지만 자식 엘리먼트는 허용되지 않는다; 빈 내용은, 텍스트와 자식 엘리먼트 모두 허용되지 않는다; 섞여진 내용은, 요소와 텍스트가 다 나타날 수 있다. 복잡한 타입은 다른 복잡한 타입을 제한(restriction, 기반 형식이 허용하는 일부 요소/속성/값을 금지)하거나 확장(속성이나 요소의 등장을 추가로 허용)하여 유도될 수 있다.

간단한 타입(데이터 타입 또는 자료형이라고도 한다)은 요소나 속성에 나타날 수 있는 텍스트 값을 제한한다. 이것이 XML 스카마가 DTD와의 차이 중 중요한 것이다. 예를 들어 속성은 유효한 날짜나 십진수만을 가지도록 제한될 수 있다.

XSD는 19가지 기본 자료형primitive data type을 제공한다: (anyURI, base64Binary, boolean, date, dateTime, decimal, double, duration, float, hexBinary, gDay, gMonth, gMonthDay, gYear, gYearMonth, NOTATION, QName, string, time). 이들 기본자료형으로부터 다음 세 가지 방법으로 새로운 자료형을 만들 수 있다:

  • restriction (허용되는 값의 집합을 줄임)
  • list (값들의 연속을 허용)
  • union (여러 타입들 중에서 값을 선택함을 허용).

명세 자체에 25가지 유도된 자료형이 정의돼 있다. 사용자는 추가로 유도된 자료형을 정의할 수 있다.

자료형을 제한하는 방법으로 최솟값과 최댓값을 지정하거나, 정규식(regular expressions)을 사용하거나, 문자열의 길이를 제한하거나, 숫자의 자릿수를 제한할 수 있다. XSD 1.1에서는 assertion이 추가되어, XPath 2.0 식을 사용하여 임의의 제한을 규정할 수 있다.

Post-Schema-Validation Infoset[편집]

XML 스키마 기반 검증(XML Schema-based validation)에 따라서, XML 문서의 구조(structure)와 내용(content)을 검증(validation) 동안 함축된 데이터 모델로 표현할 수 있게 되었다. XML 스키마 데이터 모델은 다음을 포함한다:

  • 요소와 속성의 이름들 (The vocabulary)
  • 관계와 구조 (The content model)
  • 자료형

이러한 자료의 집합을 Post-Schema-Validation Infoset (PSVI)라고 한다. PSVI는 XML 문서의 "타입"을 명확히 하고, 객체지향 프로그래밍(OOP) 패러타임을 통해 문서가 객체로 취급될 수 있도록 도와준다.

예제[편집]

간단한 스키마 문서로 주소를 기술하는 예.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Address">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Recipient" type="xs:string" />
        <xs:element name="House" type="xs:string" />
        <xs:element name="Street" type="xs:string" />
        <xs:element name="Town" type="xs:string" />
        <xs:element name="County" type="xs:string" minOccurs="0" />
        <xs:element name="PostCode" type="xs:string" />
        <xs:element name="Country" minOccurs="0">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="IN" />
              <xs:enumeration value="DE" />
              <xs:enumeration value="ES" />
              <xs:enumeration value="UK" />
              <xs:enumeration value="US" />
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

스키마의 도식화 표현을 만들어 주는 개발 도구들이 있다. 대개 아래와 같은 다이어그램을 생성한다:

A graphical representation of the schema code above

이 스키마를 따르는 XML 문서의 예

<?xml version="1.0" encoding="utf-8"?>
<Address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="SimpleAddress.xsd">
  <Recipient>Mr. Walter C. Brown</Recipient>
  <House>49</House>
  <Street>Featherstone Street</Street>
  <Town>LONDON</Town>
  <PostCode>EC1Y 8SY</PostCode>
  <Country>UK</Country>
</Address>

XML 스카마의 다른 용도[편집]

XML 스카마를 정의하는 주된 이유는 명확하게 XML 문서를 설명하기 위함입니다. 그러나 the resulting schema has a number of other uses that go beyond simple validation.

코드 생성[편집]

스카마는 코드 생성에 쓰일 수 있으며, 이를 XML Data Binding이라 한다. 이 코드는 XML 문서의 내용을 프로그래밍 환경의 객체처럼 취급할 수 있게 한다.

XML 파일 구조 문서 생성[편집]

XML 파일 구조에 대한, 사람이 읽을 수 있는 문서를 만드는 데 쓰일 수 있다. 이는 특히 저자가 annotation 요소를 사용했을 때 유용하다. 문서 생성에 규격화된 표준은 존재하지 않는다. 하지만 몇 가지 툴이 나와 있다. Xs3p stylesheet가 그것으로, 고품질의 읽을 수 있는 HTML과 인쇄물을 생성한다.

비판[편집]

Although XML Schema is successful in that it has been widely adopted and largely achieves what it set out to, it has been the subject of a great deal of severe criticism, perhaps more so than any other W3C Recommendation. Good summary of the criticisms are provided by [4] or:[5]

일반적 문제:

  • 너무 복잡해서(명세가 매우 기술적인 용어로 수백 페이지가 넘는다) 비전문가가 쓰기 어렵다. 하지만 많은 비전문가들도 자료형을 기술하는 데 스키마가 필요하다. W3C 권고 자체는 극도로 읽기 어렵다. 대부분의 사용자는 W3Cs XML Schema Primer가 이해하기 쉽다고 한다.
  • XSD는 formal mathematical specification이 전혀 없다(이는 스카마에 대해 추론하는 것을 어렵게 만든다. 예를 들어 스키마를 변조하는 것이 하위호환성이 있다는 것을 증명하는 것).
  • There are many surprises in the language, for example that restriction of elements works differently from restriction of attributes.

표현의 현실적 한계:

  • XSD는 순서 없는 콘텐츠에 가장 약한 지원을 제공한다.
  • 특별한 루트 요소를 요구할 수 없다 (그래서 가장 간단한 문서가 유효한지 검사하는 데도 더 많은 정보가 필요하다.)
  • when describing mixed content, the character data cannot be constrained in any way (not even a set of valid characters can be specified)
  • content and attribute declarations cannot depend on attributes or element context (this was also listed as a central problem of DTD)
  • it is not 100% self-describing (as a trivial example, see the previous point), even though that was an initial design requirement
  • defaults cannot be specified separate from the declarations (this makes it hard to make families of schemas that only differ in the default values); element defaults can only be character data (not containing markup).

기술적 문제:

  • although it technically is namespace conformant, it does not seem to follow the namespace spirit (e.g. "unqualified locals")
  • XSD 1.0 provided no facilities to state that the value or presence of one attribute is dependent on the values or presence of other attributes (so-called co-occurrence constraints). This has been fixed in XSD 1.1.
  • The set of XSD datatypes on offer is highly arbitrary.[6]
  • The two tasks of validation and augmentation (adding type information and default values) should be kept separate.

버전 1.1[편집]

XSD 1.1이 2012 4월W3C 권고안이 되었다. 이는 승인된 W3C 표준이 되었음을 의미한다.

XSD 1.1에서 생긴 새로운 중요한 기능들

  • The ability to define assertions against the document content by means of XPath 2.0 expressions (an idea borrowed from Schematron)
  • The ability to select the type against which an element will be validated based on the values of the element's attributes ("conditional type assignment")
  • Relaxing the rules whereby explicit elements in a content model must not match wildcards also allowed by the model
  • The ability to specify wildcards (for both elements and attributes) that apply to all types in the schema, so that they all implement the same extensibility policy

Until the Proposed Recommendation draft, XSD 1.1 also proposed the addition of a new numeric data type, precisionDecimal. This proved controversial, and was therefore dropped from the specification at a late stage of development.

참고 자료[편집]

주석[편집]

  1. “XML and Semantic Web W3C Standards Timeline”. 2012년 2월 4일. 
  2. Schema - W3C
  3. W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures
  4. James Clark summary of XML Schema criticisms, and promotion of RELAX NG as an alternative, http://www.imc.org/ietf-xml-use/mail-archive/msg00217.html
  5. Anders Møller and Michael I. Schwartzbach presents "Problems with XML Schema", http://cs.au.dk/~amoeller/XML/schemas/xmlschema-problems.html
  6. This point is amplified by Uche Ogbuji More on XML class warfare - O'Reilly ONLamp Blog

바깥 고리[편집]

W3C XML Schema 1.0 Specification

W3C XML Schema 1.1 Specification

Other