출처 - jabook


===================================================================================


4장 XML 스키마(Schema)

요점 및 보강 자료

1. 스키마란

  • XML 문서의 구조와 엘리먼트, 속성들의 관계를 정의하여 다양한 자료형을 사용할 수 있도록 정의된 문서 구조

2. 스키마 구조의 장점

  • xml 문법을 따른다.
  • 풍부한 데이터형을 제공한다.
  • 데이터의 제약 조건을 세밀하게 정의한다.

3. DTD 구조와 스키마 구조의 간단한 차이점

    DTD

    스키마

    XML 1.0에서 제정

    XML 2.0에서 제정

    익스플로러 4.0부터 도입

    익스플로러 5.0부터 도입

    확장자 DTD

    확장자 XSD

    데이터타입을 지원하는 기능이 부족

    풍부한 데이터 타입을 지원

    엘리먼트속성 등의 지원 기능이 미흡

    엘리먼트속성 등의 지원 기능이 가능

    데이터의 정렬이 어려움

    데이터의 정렬이 가능

4. XSD 문서의 기본 형식

  • 첫줄에 XML 문서와 같이 선언문부터 정의
  • <?xml version="1.0" encoding="EUC-KR"?>

  • 두 번째줄에 <schema> 태그를 정의 : XML 스키마를 정의하는 문서임을 표시
  • <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

           ... XSD 정의 문장

    </xsd:schema>

5. 이름 공간(namespace)

  • 이름공간이란?
    • 서로 다르게 작성한 XML 문서에도 공통적인 엘리먼트가 있을 수 있다. 이 엘리먼트는 이름은 같지만, 내용은 전혀 다르다. 이 엘리먼트를 구별하기 위해 이름 공간을 사용한다.
      • 어떤 이름이 통용되는 범위
    • 접두사와 엘리먼트는 콜론(:)으로 구분
  • 이름공간 정의
  • <접두사:태그명  xmlnx:접두사="홈페이지주소" />

6. XSD와 XML 문서 연결하기

7. 엘리먼트 정의

  • <element>태그
    • <xsd:element name="엘리먼트이름" type="xsd:데이터형">

  • 데이터형
    • number : 임의의 수를 처리하는 데이터 타입

      int : 정수형을 처리

      float : 실수형을 처리

      date : 날짜를 처리

      dateTime : 날짜와 시간을 처리

      boolean : 논리값을 처리

      char : 문자를 처리

      string : 문자열을 처리

     

      <?xml version="1.0" encoding="EUC-KR"?>

      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

              <xsd:element name="도서목록" type="xsd:string">

              </xsd:element>

      </xsd:schema>

    • 도서목록02.xml

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록01.xsd">

              도서목록 관리 -  일반 문자열을 나열

      </도서목록>

  • <complexType> 태그
    • 하위 엘리먼트를 포함하거나 속성이 있는 엘리먼트를 선언 (복잡한 구조)

     

  • <simpleType>태그
    • 속성이나 하위 엘리먼트를 포함하지 않는 엘리먼트 (간단한 구조)

     

  • <sequence> 태그
    • 자식 엘리먼트가 순서대로 와야 할 때 사용

      <도서목록>

           <도서>

               <분류>컴퓨터</분류>

                <제목>XML</제목>

               <출판사>정보</출판사>

               <저자>박준서, 최배근</저자>

           </도서>

      </도서목록>

      <?xml version="1.0" encoding="EUC-KR"?>

      <!DOCTYPE 도서목록[

      <!ELEMENT 도서목록 (도서) >

      <!ELEMENT 도서 (분류,제목,출판사,저자) >

      <!ELEMENT 분류 (#PCDATA) >

      <!ELEMENT 제목 (#PCDATA) >

      <!ELEMENT 출판사 (#PCDATA)

      <!ELEMENT 저자 (#PCDATA) >

      ]>

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록04.xsd">

        ☞ 도서목록05.xml 파일에서 도서목록루트엘리먼트 안에  

                도서목록04.xsd 문서를 참조하라고 정의

              <도서>

                      <분류>컴퓨터</분류>

                      <제목>XML</제목>

                      <출판사>정보</출판사>

                      <저자>박준서, 최배근</저자>

              </도서>

      </도서목록>

      <?xml version="1.0" encoding="EUC-KR"?>

      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

        <xsd:element name="도서목록">

          <xsd:complexType>    ☞ 도서목록 엘리먼트는 하위 엘리먼트를 포함

            <xsd:sequence>     ☞ 자식 엘리먼트들이 정의한 순서대로 반드시 정의

                                도서엘리먼트와 하위 엘리먼트는 생략 불가능

              <xsd:element name="도서">

                <xsd:complexType>

                  <xsd:sequence>

       

                    <xsd:element name="분류" type="xsd:string" />

                    <xsd:element name="제목" type="xsd:string" />

                    <xsd:element name="출판사" type="xsd:string" />

                    <xsd:element name="저자" type="xsd:string" />

        ☞ 분류,제목,출판사,저자태그는 문자형 생략 불가능

                  </xsd:sequence>

                </xsd:complexType>

              </xsd:element>

            </xsd:sequence>

          </xsd:complexType>

        </xsd:element>

      </xsd:schema>

      <?xml version="1.0" encoding="euc-kr" ?>

      <members>

              <member>

                      <name>홍길동</name>

                      <phone_no>031-111-2323</phone_no>

              </member>

              <member>

                      <name>김유신</name>

                      <phone_no>02-111-1234</phone_no>

              </member>

      </members>

      <?xml version="1.0" encoding="euc-kr" ?>

      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

      <xsd:element name="members">

       <xsd:complexType>

        <xsd:sequence>

          <xsd:element name="member" minOccurs="1" maxOccurs="unbounded">

           <xsd:complexType>

             <xsd:sequence>

              <xsd:element name="name" type="xsd:string" />

              <xsd:element name="phone_no" type="xsd:string"

                                                              minOccurs="1" maxOccurs="2"/>

             </xsd:sequence>

           </xsd:complexType>

          </xsd:element>

        </xsd:sequence>

       </xsd:complexType>

      </xsd:element>

      </xsd:schema>

      <?xml version="1.0" encoding="euc-kr" ?>

      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

       

         <!-- 루트요소 선언 -->

         <xsd:element name="members">

              <xsd:complexType>

                    <xsd:sequence>

                          <xsd:element name="member"   type="memberType"  

                                                          minOccurs="1" maxOccurs="unbounded" />

                    </xsd:sequence>

              </xsd:complexType>

         </xsd:element>

       

         <!-- memberType 선언 -->

         <xsd:complexType name="memberType">

              <xsd:sequence>

                    <xsd:element name="name" type="xsd:string" />

                    <xsd:element name="phone_no" type="xsd:string" />

              </xsd:sequence>

         </xsd:complexType>

       

      </xsd:schema>

  • <minOccurs> 태그
    • 엘리먼트의 최소 반복 횟수를 정의
    • 생략시 기본값 = 1
    • 0으로 정의시 : 엘리먼트는 생략
    • 1로 정의시 : 반드시 엘리먼트 1번 정의

     

  • <maxOccurs> 태그
    • 엘리먼트의 최대 반복 횟수를 정의
    • 생략시 기본값 = 1
    • 1로 정의시 : 무조건 한번만 정의
    • unbound로 정의시 반복 횟수에 제한 받지 않고 사용
    • 도서목록14.xml

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록13.xsd">

              <도서>

                      <분류>컴퓨터</분류>

                      <제목>XML</제목>

                      <출판사>정보</출판사>

                      <저자>박준서</저자>

                      <저자>최배근</저자>

              </도서>        

              <도서>

                      <분류>컴퓨터</분류>

                      <저자>박준서</저자>             

              </도서>

      </도서목록>

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" minOccurs="1" maxOccurs="unbounded">

        ☞ 도서엘리먼트를 한번 이상 정의 (+)

                <complexType>

                  <sequence>

                    <element name="분류" type="string" minOccurs="1" maxOccurs="1" />

                ☞ 분류엘리먼트를 한번은 꼭 정의 (  )

                    <element name="제목" type="string" minOccurs="0" maxOccurs="1" />

                       ☞ 제목 엘리먼트를 정의하지 않거나 한번 정의 (?)

                    <element name="출판사" type="string" minOccurs="0" maxOccurs="unbounded" />

                       ☞ 출판사 엘리먼트를 정의하지 않거나 여러번 정의 (*)

                    <element name="저자" type="string" minOccurs="1" maxOccurs="2" />

                ☞ 저자 엘리먼트를 한번 정의 또는 2번까지 정의

                  </sequence>

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

       

  • <choice> 태그
    • dtd에서의 |기호와 같은 역할
    • 여러 가지 엘리먼트 중에서 한 개만을 정의

      <?xml version="1.0" encoding="EUC-KR"?>

      <!DOCTYPE 도서목록[

        <!ELEMENT 도서목록 (도서) >

        <!ELEMENT 도서 (분류|제목|출판사|저자) >

        <!ELEMENT 분류 (#PCDATA) >

        <!ELEMENT 제목 (#PCDATA) >

        <!ELEMENT 출판사 (#PCDATA)

        <!ELEMENT 저자 (#PCDATA) >

      ]>

    • 도서목록10.xml
    • <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록09.xsd">

              <도서>

                      <제목>XML</제목>

              </도서>

      </도서목록>

    • 도서목록09.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

       

              <element name="도서">

                <complexType>

                  <choice>    

        ☞ 분류,제목,출판사,저자 엘리먼트 중에서 한 개를 선택해서 정의

                    <element name="분류" type="string" />

                    <element name="제목" type="string" />

                    <element name="출판사" type="string" />

                    <element name="저자" type="string" />

       

                  </choice>

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

    • member2.xml : <member>의 자식 요소로 <name>과 <phone_no> 두 개의 요소를 가지거나

                                           <lname>, <fname>, <phone_no> 세 개의 요소를 가질 수 있는 예

      <?xml version="1.0" encoding="EUC-KR"?>

      <members>

              <member>

                      <name>홍길동</name>

                      <phone_no>031-111-2323</phone_no>

              </member>

              <member>

                      <lname>김</lname>

                      <fname>유신</fname>

                      <phone_no>031-111-2323</phone_no>

              </member>

      </members>

    • member2.xsd

      <?xml version="1.0" encoding="euc-kr" ?>

      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

       

         <!-- 루트요소 선언 -->

         <xsd:element name="members">

              <xsd:complexType>

                    <xsd:sequence>

                          <xsd:element name="member" type="memberType"  

                                                       minOccurs="1" maxOccurs="unbounded" />

                    </xsd:sequence>

              </xsd:complexType>

         </xsd:element>

       

         <!-- memberType 선언 -->

         <xsd:complexType name="memberType">

               <xsd:choice>

                    <xsd:sequence>

                          <xsd:element name="name" type="xsd:string" />

                          <xsd:element name="phone_no" type="xsd:string" />

                    </xsd:sequence>

                    <xsd:sequence>

                          <xsd:element name="lname" type="xsd:string" />

                          <xsd:element name="fname" type="xsd:string" />

                          <xsd:element name="phone_no" type="xsd:string" />

                    </xsd:sequence>

               </xsd:choice>

         </xsd:complexType>

      </xsd:schema>

  • <all> 태그
    • 엘리먼트의 순서를 생각하지 않을 때 사용
    • all 태그를 사용할 경우 복잡성을 줄이기 위한 제약사항
      • 내부의 요소들은 반복이 1회까지로 제한
      • choice 태그 안에서 사용할 수 없는 등 다른 복합자와 함께 사용될 때 제약이 존재
    • 도서목록12.xml
    • <?xml version="1.0" encoding="EUC-KR"?>

       

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록11.xsd">

              <도서>

                      <제목>XML</제목>

                      <분류>컴퓨터</분류>             

                      <저자>박준서</저자>

                      <출판사>정보</출판사>           

              </도서>

      </도서목록>

    • 도서목록11.xsd
    • <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서">

                <complexType>

                  <all>

        ☞ 분류,제목,출판사,저자 엘리먼트는 순서를 생각하지 않는다.

                    <element name="분류" type="string" />

                    <element name="제목" type="string" />

                    <element name="출판사" type="string" />

                    <element name="저자" type="string" />

                  </all>

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

    • member2-1.xml : <member>의 자식 요소로 <name>과 <phone_no> 요소가 순서가 없을때

      <?xml version="1.0" encoding="EUC-KR"?>

      <members>

              <member>

                      <name>홍길동</name>

                      <phone_no>031-111-2323</phone_no>

              </member>

      </members>

    • member2-1.xsd

      <?xml version="1.0" encoding="euc-kr" ?>

      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

       

         <!-- 루트요소 선언 -->

         <xsd:element name="members">

              <xsd:complexType>

                    <xsd:sequence>

                          <xsd:element name="member" type="memberType"  

                                                       minOccurs="1" maxOccurs="unbounded" />

                    </xsd:sequence>

              </xsd:complexType>

         </xsd:element>

       

         <!-- memberType 선언 -->

         <xsd:complexType name="memberType">

               <xsd:all>

                          <xsd:element name="name" type="xsd:string" />

                          <xsd:element name="phone_no" type="xsd:string" />

               </xsd:all>

         </xsd:complexType>

      </xsd:schema>

       

  • <default> 태그
    • 엘리먼트의 값이 정의되지 않으면 default로 정의된 값을 할당

     

  • <fixed> 태그
    • 엘리먼트에 정의되는 값이 생략 또는
    • fixed로 정의된 값이 엘리먼트의 값으로 정의

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록15.xsd">

              <도서>

                      <분류></분류>

                      <제목>XML</제목>

              </도서>

      </도서목록>

    • 도서목록15.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" minOccurs="1" maxOccurs="unbounded">

                <complexType>

                  <sequence>

                    <element name="분류" type="string" default="컴퓨터" />

          ☞ 분류 엘리먼트의 값을 정의하지 않으면 "컴퓨터" 값으로 정의됨

          ☞ 분류 엘리먼트의 값을 정의하면 정의한 값이 사용

                    <element name="제목" type="string" fixed="XML" />

          ☞ 제목 엘리먼트의 값을 생략시 "XML"값으로 정의됨

          ☞ 제목 엘리먼트의 값을 "XML"이 아닌 다른 값으로 정의하면  오류

                  </sequence>

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

       

  • <group> 태그
    • 엘리먼트의 반복을 쉽게 정의
    • 반복되는 엘리먼트의 그룹을 <group>태그로 묶은 후 XSD에서 필요할 때 가져와서 사용

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록17.xsd">

              <도서>

                      <분류>컴퓨터</분류>

                      <제목>XML</제목>

                      <출판사>정보</출판사>

                      <저자>박준서</저자>

              </도서>

      </도서목록>

    • 도서목록17.xsd

      <?xml version="1.0" encoding="EUC-KR" ?>

      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

       

          <xsd:group name="myItem">

            <xsd:sequence>

              <xsd:element name="분류" type="xsd:string" />

              <xsd:element name="제목" type="xsd:string" />

              <xsd:element name="출판사" type="xsd:string" />

              <xsd:element name="저자" type="xsd:string" />

            </xsd:sequence>

          </xsd:group>

        

          <xsd:element name="도서목록">

            <xsd:complexType>

              <xsd:sequence>

                <xsd:element name="도서">

                  <xsd:complexType>

                    <xsd:sequence>

                      <xsd:group ref="myItem" />

                    </xsd:sequence>

                  </xsd:complexType>

                </xsd:element>

              </xsd:sequence>

            </xsd:complexType>

          </xsd:element>

       

      </xsd:schema>

         

8. 어트리뷰트 정의

  • <attribute> 태그
    • <attribute  name="속성이름"     

                                    type="string"               => 데이터형

                                    default="값"                => 기본값 정의

                                    fixed="값"                   => 고정값 정의

                                    ref="속성명                 => 미리 정의된 속성이름

                                    use="값"                     => 구속조건

                                    id="값"                        => 고유한 값

                                    form="값>                  => 한정된 이름인지의 여부

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록19.xsd">

              <도서 분류="컴퓨터" 제목="XML" />

              <도서 분류="컴퓨터" />

      </도서목록>

    • 도서목록19.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" maxOccurs="unbounded">

                <complexType>

                    <attribute name="분류" type="string" />

                  <attribute name="제목" type="string" />

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

       

  • 어트리뷰트에 고유한 값 정의하기
    • type 속성에 ID 유형을 정의

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록21.xsd">

              <도서 분류="컴퓨터1" 제목="XML" />

              <도서 분류="컴퓨터2" />

      </도서목록>

    • 도서목록21.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" maxOccurs="unbounded">

                <complexType>

                  <attribute name="분류" type="ID" />

                  <attribute name="제목" type="string" />

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

       

  • use 속성
    • use 속성이 가지는 값
      • optional : 속성을 정의하지 않아도 됨
      • required : 꼭 속성을 정의해야 함
      • prohibited : 속성이 전혀 없다.

                                                   정의하지 않아도 되는 제목 속성을 정의

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록23.xsd">

              <도서 분류="컴퓨터" 제목="XML" />

              <도서 분류="컴퓨터" />

      </도서목록>

    • 도서목록23.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" maxOccurs="unbounded">

                <complexType>

                    <attribute name="분류" type="string" use="required" />

                  <attribute name="제목" type="string" use="optional" />

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

       

  • default와 fixed 속성
    • default 속성 : 속성을 정의하지 않은 경우에 기본값으로 사용
    • fixed 속성 : 무조건 이 값만을 가지는 속성 정의시 사용
    • 도서목록26.xml : 도서 태그안에 "컴퓨터"라는 기본값을 가지는 분류 속성과

                                  "xml무작정따라하기"라는 고정값을 가지는 제목 속성을 정의

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록25.xsd">

              <도서 분류="컴퓨터" 제목="XML" />

              <도서 />

      </도서목록>

    • 도서목록25.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" maxOccurs="unbounded">

                <complexType>

                  <attribute name="분류" type="string" default="컴퓨터" />

                  <attribute name="제목" type="string" fixed="XML 무작정 따라하기" />

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

       

  • <simpleType>태그
    • <enumeration>태그
      • 여러 개의 정의된 값 중에서 하나의 속성만을 선택
    • <length>태그
      • 어트리뷰트 데이터에 있는 문자의 개수를 정의
    • <minLength>태그
      • 어트리뷰트 데이터에 있는 문자의 최소 개수를 정의
    • <maxLength>태그
      • 어트리뷰터 데이터에 있는 문자의 최대 개수를 정의
    • <minInclusive>태그
      • 어트리뷰트 데이터의 최소 범위를 지정
    • <maxInclusive>태그
      • 어트리뷰트 데이터의 최대 범위를 지정

     

                          분류 속성은 "컴퓨터","소설","만화"라는 값중에 하나의 값만 가짐

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록27.xsd">

              <도서 분류="컴퓨터" 제목="XML" />

              <도서 분류="소설" 제목="비와그리움" />

      </도서목록>

    • 도서목록27.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" maxOccurs="unbounded">

                <complexType>

                  <attribute name="분류">

                    <simpleType>

                      <restriction base="string">

                        <enumeration value="컴퓨터" />

                        <enumeration value="소설" />

                        <enumeration value="만화" />

                      </restriction>

                    </simpleType>

                  </attribute>

                  <attribute name="제목" type="string" />

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

       

                                                  분류 속성 값의 길이는 3개, 제목 속성 값의 길이는 최소 1개 최대 6개이다.

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록29.xsd">

              <도서 분류="컴퓨터" 제목="XML" />

              <도서 분류="소설1" 제목="비와그리움" />

      </도서목록>

    • 도서목록29.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" maxOccurs="unbounded">

                <complexType>

       

                  <attribute name="분류">

                    <simpleType>

                      <restriction base="string">

                        <length value="3" />

                      </restriction>

                    </simpleType>

                  </attribute>

                  

                  <attribute name="제목">

                    <simpleType>

                      <restriction base="string">

                        <minLength value="1" />

                        <maxLength value="6" />

                      </restriction>

                    </simpleType>

                  </attribute>

                  

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

    • 도서목록32.xml :  도서태그의 수량 속성은 0에서 10사이의 값을 가진다.

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록31.xsd">

              <도서 수량="10" />

      </도서목록>

    • 도서목록31.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" maxOccurs="unbounded">

                <complexType>

                

                  <attribute name="수량">

                    <simpleType>

                      <restriction base="integer">

                        <minInclusive value="0" />

                        <maxInclusive value="10" />

                      </restriction>

                    </simpleType>

                  </attribute>

                  

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>

    • 도서목록34.xml : 도서의 자식태그인 분류 태그는 컴퓨터, 소설, 만화라는 값중에 하나의 값만 가진다.

      <?xml version="1.0" encoding="EUC-KR"?>

      <도서목록 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xsi:noNamespaceSchemaLocation="도서목록33.xsd">

              <도서>

                      <분류>컴퓨터</분류>

              </도서>

              <도서>

                      <분류>소설</분류>

              </도서>

      </도서목록>

    • 도서목록33.xsd

      <?xml version="1.0" encoding="EUC-KR"?>

      <schema xmlns="http://www.w3.org/2001/XMLSchema">

        <element name="도서목록">

          <complexType>

            <sequence>

              <element name="도서" maxOccurs="unbounded">

                <complexType>

                  <sequence>

                    <element name="분류">

                      <simpleType>

                        <restriction base="string">

                          <enumeration value="컴퓨터" />

                          <enumeration value="소설" />

                          <enumeration value="만화" />

                        </restriction>

                      </simpleType>

                    </element>

                  </sequence>

                </complexType>

              </element>

            </sequence>

          </complexType>

        </element>

      </schema>


출처 - http://xmljang.com.ne.kr/content/ch4-schema.html



'Development > XML' 카테고리의 다른 글

XSL(Extensible Stylesheet Language)  (0) 2013.02.19
XPath  (0) 2013.02.19
XML - XML 예약문자  (0) 2012.09.16
xml namespace  (0) 2012.03.24
XML, DTD, XSD, XSL 관계  (0) 2012.02.13
Posted by linuxism
,