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를 선호되는 이름으로 정했으며, 이 문서에서도 그것을 따른다.

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

Schema들과 Schema 문서[편집]

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

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

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

Schema 요소들[편집]

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

  • 엘리먼트 선언(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), 애트리뷰트의 속성을 정의한다. 여기서도 애트리뷰트 이름과 대상 네임스페이스를 포함한다. 애트리뷰트의 타입은 애트리뷰트가 가질 수 있는 값을 제한한다. 애트리뷰트 선언에 기본값을 지정하거나, 값을 고정할 수 있다.
  • Simple type과 complex types. 다음 절에서 다룬다.
  • Model group and attribute group definitions. These are essentially macros: named groups of elements and attributes that can be reused in many different type definitions.
  • 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가 있다.

종류[편집]

Complex type은 엘리먼트에 허용된 내용(content)을 기술한다. 거기에는 그 엘리먼트와 its element and text children and its attributes. Complex type의 정의는 애트리뷰트들의 집합과 내용 모형(content model)으로 이루어진다. consists of a set of attribute uses and a content model. 내용 모형에는 여러 가지가 있다. Element-only content는, 텍스트(공백whitespace이나, 자식 엘리먼트로 감싸진 텍스트는 제외)가 나타나지 않는 것이다; simple content는, 텍스트가 허용되지만 자식 엘리먼트는 허용되지 않는다; empty content는, 텍스트와 자식 엘리먼트 모두 허용되지 않는다; mixed content는, 엘리먼트와 텍스트가 다 나타날 수 있다. Complex type은 다른 complex type울 제한(restriction, 기반 형식이 허용하는 일부 엘리먼트/애트리뷰트/값을 금지)하거나 확장(애트리뷰트나 엘리먼트의 등장을 추가로 허용)하여 유도될 수 있다.

Simple type(data type이라고도 한다)은 엘리먼트나 애트리뷰트에 나타날 수 있는 텍스트 값을 제한한다. 이것이 XML Schema가 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[편집]

After XML Schema-based validation, it is possible to express an XML document's structure and content in terms of the data model that was implicit during validation. The XML Schema data model includes:

  • The vocabulary (엘리먼트와 애트리뷰트의 이름들)
  • The content model (관계와 구조)
  • 자료형

This collection of information is called the Post-Schema-Validation Infoset (PSVI). The PSVI gives a valid XML document its "type" and facilitates treating the document as an object, using object-oriented programming (OOP) paradigms.

예제[편집]

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

<?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>

Secondary uses for XML Schemas[편집]

The primary reason for defining an XML schema is to formally describe an XML document; however the resulting schema has a number of other uses that go beyond simple validation.

Code generation[편집]

The Schema는 코드 생성에 쓰일 수 있으며, 이를 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]

General problems:

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

Practical limitations of expressibility:

  • XSD offers very weak support for unordered content.
  • cannot require specific root element (so extra information is required to validate even the simplest documents)
  • 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).

Technical problems:

  • 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.

Version 1.1[편집]

XSD 1.1 became a W3C Recommendation in April 2012, which means it is an approved W3C specification.

Significant new features in XSD 1.1 are:

  • 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