Today
-
Yesterday
-
Total
-
  • XML 스키마
    Programmer/Computer Science 2012. 12. 28. 10:21

    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>


    관련 링크


    댓글

Designed by Tistory.