Theory/Data Exchange

XML 스키마

XML 스키마는 XML 문서의 구조화시키는 방법을 제공한다. XML 스키마는 DTD의 제한 사항을 개선한 차세대 문서 구조화 기법이다.


XML 스키마의 특징

  • XML로 작성되었다.
  • XML 네임스페이스와 데이터 타입을 지원한다.
  • 확장성을 가졌다.


<schema> 요소

  • XML 스키마 문서의 최상의 요소이다.
  • <xs:schema targetNamespace="urn:mpeg:DASH:schema:MPD:2011"
                attributeFormDefault="unqualified"
                elementFormDefault="qualified"
                xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns:xlink="http://www.w3.org/1999/xlink"
                xmlns="urn:mpeg:DASH:schema:MPD:2011">
    </xs:schema>
    • targetNamespace - 작성하는 스키마 문서 내에서 사용자가 임의로 정의하는 문서 요소(요소, 속성 등)이 위치할 네임스페이스를 나타내기 위해서 사용한다.
    • attributeFormDefault, elementFormDefault - XML 문서 내의 요소와 속성이 한정되는 형태를 지정한다.
      • qualified - 요소 또는 속성이 네임스페이스 URI와 결합된다. 일반적으로 이것이 기본값이다.
      • unqualified - 요소 또는 속성이 네임스페이스 URI와 결합되지 않는다.
    • xmlns:xs - 스키마 스펙에서 명시하는 네임스페이스를 나타낸기 위해서 사용한다.
    • xmlns - 접두사를 명시하지 않고 네임스페이스를 선언하기 위해서 사용한다. 일반적으로 targetNamespace의 URI와 동일하다.


XML 문서에서 스키마 참고하기

  • XML 문서를 스키마로 검사하려면 참고하도록 명시해야 한다.
  • <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="urn:mpeg:DASH:schema:MPD:2011"
         xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd">
    </MPD>
    • xmlns:xsi - 인스턴스 네임스페이스 URI를 지정한다.
    • xmlns - 기본 네임스페이스의 선언을 명시한다.
    • xsi:schemaLocation - 두개의 값이 공백으로 구분된다. 첫번째는 사용할 네임스페이스(보통 기본 네임스페이스와 동일)이고, 두번째는 참조할 스키마 파일명이다.


간단한 요소 정의

  • 형식
  • <xs:element name="xxx" type="yyy"/>
    • name - 요소의 이름
    • type - 데이타의 형식. 아래는 내장된 테이타 형식.
      • xs:string
      • xs:decimal
      • xs:integer
      • xs:boolean
      • xs:date
      • xs:time
    • minOccurs - 문서 내에서 사용할 수 있는 최소 횟수. 기본값은 1.
    • maxOccurs - 문서 내에서 사용할 수 있는 최대 횟수. 기본값은 1.
    • default - 기본값을 지정. 값이 명시되지 않은 요소에 기본값을 할당한다.
    • fixed -  고정값을 지정. 고정값 이외에 다른 값을 명시할 수 없다.


복잡한 요소 정의

  • <sequence>
  • <element name="xxx">
      <complexType>
        <sequence>
          <element name="yyy">
          <element name="zzz">
        </sequence>
      </complexType>
    </element>
  • <choice>
  • <element name="xxx">
      <complexType>
        <choice>
          <element name="yyy">
          <element name="zzz">
        </sequence>
      </complexType>
    </element>
  • <all>
  • <element name="xxx">
      <complexType>
        <all>
          <element name="yyy">
          <element name="zzz">
        </sequence>
      </complexType>
    </element>


속성의 정의

  • 형식
  • <xs:attribute name="xxx" type="yyy"/>
    • name - 속성의 이름.
    • type - 데이타의 형식. 내장된 데이타 형식은 요소 정의 참조.
    • default - 기본값을 지정. 값이 명시되지 않은 속성에 기본값을 할당한다.
    • fixed -  고정값을 지정. 고정값 이외에 다른 값을 명시할 수 없다.
    • use - 선택할 수 있는 세가지 값이 있다.
      • optional - 속성이 생략 가능.
      • prohibited - 절대로 포함될 수 없음.
      • required - 반드시 포함되어야 함.


: MPD schema

<!-- MPD: main element -->
<xs:element name="MPD" type="MPDtype"/>
<!-- MPD Type -->
<xs:complexType name="MPDtype">
  <xs:sequence>
    <xs:element name="ProgramInformation" type="ProgramInformationType" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element name="BaseURL" type="BaseURLType" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element name="Location" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
    <xs:element name="Period" type="PeriodType" maxOccurs="unbounded"/>
    <xs:element name="Metrics" type="MetricsType" minOccurs="0" maxOccurs="unbounded"/>
    <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="id" type="xs:string"/>
  <xs:attribute name="profiles" type="xs:string" use="required"/>
  <xs:attribute name="type" type="PresentationType" default="static"/>
  <xs:attribute name="availabilityStartTime" type="xs:dateTime"/>
  <xs:attribute name="availabilityEndTime" type="xs:dateTime"/>
  <xs:attribute name="mediaPresentationDuration" type="xs:duration"/>
  <xs:attribute name="minimumUpdatePeriod" type="xs:duration"/>
  <xs:attribute name="minBufferTime" type="xs:duration" use="required"/>
  <xs:attribute name="timeShiftBufferDepth" type="xs:duration"/>
  <xs:attribute name="suggestedPresentationDelay" type="xs:duration"/>
  <xs:attribute name="maxSegmentDuration" type="xs:duration"/>
  <xs:attribute name="maxSubsegmentDuration" type="xs:duration"/>
  <xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<!-- Presentation Type enumeration -->
<xs:simpleType name="PresentationType">
  <xs:restriction base="xs:string"> <xs:enumeration value="static"/>
  <xs:enumeration value="dynamic"/>
  </xs:restriction>
</xs:simpleType>


관련 링크


신고

'Theory > Data Exchange' 카테고리의 다른 글

JSON  (0) 2017.02.01
XML 스키마  (0) 2012.12.28
DTD  (0) 2012.12.27
XML  (0) 2012.12.21

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

Today : 98
Yesterday : 147
Total : 171,340