Mark Up/XML XSD 단순 타입
  • 728x90
    반응형

    XSD 단순 타입




    단순 타입(simple type)요소



    XSD에서 요소는 오직 값만을 포함할 수 있는 단순 타입(simple type) 요소로 선언된다.

    단순 타입의 요소는 자식 요소나 속성을 포함할 수 없다.

    여기서 값만을 포함한다는 의미는 오직 숫자나 불리언, 문자열만을 포함할 수 있는 요소라는 뜻이다.



    단순 타입 요소의 선언



    XSD에서 단순 타입 요소를 선언하는 문법은 다음과 같다.


    문법

    <xs:element name="요소이름" type="요소타입"/>


    요소의 타입에는 XSD에서 제공하는 다양한 기본 타입과 파생된 타입을 사용할 수 있다.


    다음 예제는 단순 타입 요소를 XSD에서 어떻게 선언하는지를 보여주는 예제이다.


    XML 예제

    <player>홍길동</player>

    <rank>24</rank>

    <goal>13:15:00</goal>


    XSD 예제

    <xs:element name="player" type="xs:string"/>    // 문자열 타입

    <xs:element name="rank" type="xs:integer"/>    // 숫자 타입

    <xs:element name="goal" type="xs:time"/>        // 시간 타입



    단순 타입 요소의 기본값 선언



    단순 타입 요소는 default 속성을 이용하여 기본값을 명시할 수 있다.

    이렇게 명시된 기본값은 값이 명시되지 않는 경우에 자동으로 설정된다.


    다음 예제에서 <grade>요소의 값이 직접 명시되지 않으면, 기본값인 'D'로 자동 설정된다.


    XSD 예제

    <xs:element name="grade" type="xs:string" default="D"/>



    단순 타입 요소의 고정값 선언



    단순 타입 요소는 fixed 속성을 이용하여 고정값을 명시할 수 있다.

    이렇게 고정값을 명시하면 자동으로 그 값이 부여되며, 사용자가 임의로 값을 변경할 수 없게 된다.


    다음 예제에서 <grade>요소의 값은 무조건 'A'로 설정된다.


    XSD 예제

    <xs:element name="grade" type="xs:string" fixed="A"/>



    XSD 속성(attribute)



    XSD에서 단순 타입(simple type) 요소는 속성을 가질 수 없다.

    만약에 단순 타입의 요소가 속성을 가지게 되면, 그 요소는 복합 타입(complex type)이 된다.


    하지만 속성(attribute) 그 자체는 언제나 단순 타입(simple type)으로 선언된다.



    속성의 선언



    XSD에서 속성을 선언하는 문법은 다음과 같다.


    문법

    <xs:attribute name="속성이름" type="속성타입"/>


    속성의 타입에는 XSD에서 제공하는 다양한 기본 타입과 파생된 타입을 사용할 수 있다.


    다음 예제는 속성을 XSD에서 어떻게 선언하는지를 보여주는 예제이다.


    XML 예제

    <priority rating="3">middle</priority>


    XSD 예제

    <xs:attribute name="rating" type="xs:integer"/>



    속성의 기본값 선언



    요소와 마찬가지로 속성도 default 속성을 이용하여 기본값을 명시할 수 있다.

    이렇게 명시된 기본값은 값이 명시되지 않는 경우에 자동으로 설정된다.


    다음 예제에서 division 속성값이 직접 명시되지 않으면, 기본값인 "man"으로 자동 설정된다.


    XSD 예제

    <xs:attribute name="division" type="xs:string" default="man"/>



    속성의 고정값 선언



    요소와 마찬가지로 속성도 fixed 속성을 사용하여 고정값을 명시할 수 있다.

    이렇게 고정값을 명시하면 자동으로 그 값이 부여되며, 사용자가 임의로 값을 변경할 수 없게 된다.


    다음 예제에서 division 속성값은 무조건 "woman"으로 설정된다.


    XSD 예제

    <xs:attribute name="division" type="xs:string" fixed="woman"/>



    필수 속성의 선언



    속성은 기본적으로 필수가 아니다.

    하지만 use 속성값을 required로 설정하면 해당 속성을 필수 속성으로 선언할 수 있다.


    이렇게 선언된 필수 속성은 요소의 선언 시 반드시 같이 선언되어야 한다.

    만약 요소의 선언 시 필수 속성이 함께 선언되지 않으면, 해당 XML 문서는 유효하지 않은 문서로 간주한다.


    다음 예제에서 division 속성은 반드시 선언되어야만 한다.


    XSD 예제

    <xs:attribute name="division type="xs:string" use="required"/>


    Tip : use 속성값을 prohibited로 설정하면, 해당 속성이 존재하지 않아야만 해당 XML 문서가 유효한 문서로 간주한다.



    XSD 제한(facets)



    XSD에서 XML 요소나 속성을 선언할 때, 해당 요소나 속성이 가질 수 있는 값에 대한 범위를 제한할 수 있다.

    이렇게 기존의 타입(simple type)을 제한함으로써 새로운 타입을 정의할 수 있다.


    XSD에서는 값의 범위를 제한하기 위해 <restriction>요소를 사용한다.


    문법

    <restriction base="타입">

    타입에 대한 제한 사항

    </restriction>


    base 속성은 제한 사항을 적용할 타입을 명시한다.



    특정 범위의 값을 가지도록 제한



    단순 타입의 요소가 특정 범위 안의 값을 가지도록 제한할 때에는 다음 제한들을 사용한다.


    • maxExclusive : 특정 범위의 상한값을 명시한다.
    • maxInclusive : 특정 범위의 상한값을 명시한다.
    • minExclusive : 특정 범위의 하한값을 명시한다.
    • minInclusive : 특정 범위의 하한값을 명시한다.
    여기에서 exclusive 와 inclusive의 차이는 명시한 값까지 포함하는지 안 하는 지이다.
    inclusive는 명시한 값까지 포함하며, exclusive는 명시한 값은 포함하지 않는다.

    다음 예제는 새로운 단순 타입(simple type) 요소인 <allowance> 요소를 선언하는 예제이다.

    예제

    <xs:element name="allowance">

    <xs:simpleType>

    <xs:restriction base="xs:integer">

    <xs:minInclusive value="0"/>

    <xs:maxInclusive value="100000"/>

    </xs:restriction>

    </xs:simpleType>

    </xs:element>


    위의 예제에서 선언된 <allowance>요소에는 최소 0부터 최대 100,000까지의 값을 대입할 수 있다.



    특정 값 중에서 선택하도록 제한



    단순 타입 요소의 값을 특정 값 중에서 선택하도록 제한하고자 할 때는 다음 제한을 사용한다.


    • enumeration : 값으로 설정할 수 있는 허용된 값을의 리스트를 명시한다.

    사용자는 요소를 선언할 때 <enumeration>제한으로 나열된 값 중에서 하나만을 선택하여 대입해야 한다.


    다음 예제는 새로운 단순 타입 요소인 <unit>요소를 선언하는 예제이다.


    예제

    <xs:element name="unit">

    <xs:simpleType>

    <xs:restriction base="xs:string">

    <xs:enumeration value="원"/>

    <xs:enumeration value="달러"/>

    <xs:enumeration value="엔"/>

    </xs:restriction>

    </xs:simpleType>

    </xs:element>


    위의 예제에서 선언된 <unit> 요소는 원, 달러, 엔 중에서 하나의 값만을 대입할 수 있다.



    텍스트 데이터의 패턴 지정



    단순 타입 요소의 텍스트 데이터가 특정 패턴을 보이도록 제한할 때에는 다음 제한을 사용한다.


    -pattern : 텍스트 데이터의 형식을 정규 표현식을 사용하여 명시한다.


    사용자는 <pattern> 제한에 정규 표현식을 사용하여 허용되는 고정된 패턴을 만들 수 있다.


    <pattern>제한에 사용되는 대표적인 정규 표현식은 다음과 같다.


    정규 표현식

    설명

    예제

    a\d

    첫 번째 문자가 'a'로 시작하며, 두 번째 문자가 0부터 9까지의 숫자인 텍스트

    a0, a1, ..., a9 

    a\d*

    첫 번째 문자가 'a'로 시작하며, 두 번째 문자부터는 0부터 9까지의 숫자가 0번 이상 나타나는 텍스트

    a, a0, a1, ..., a9, a10, ...

    a\d+

    첫 번째 문자가 'a'로 시작하며, 두번째 문자부터는 0부터 9까지의 숫자가 1번 이상 나타나는 텍스트

    a0, a1, ..., a9, a10, ...

    x?a

    첫 번째 문자로 x가 0번 또는 1번만 나타나며, 두 번째 문자는 'a'인 텍스트

    a, xa

    a[^0]

    첫 번째 문자가 'a'로 시작하며, 두 번째 문자가 0은 제외한 숫자인 텍스트

    a1, a2, ..., a9

    \d{2}-\d{5}

    처음에 두 자리의 숫자로 시작하고, 그 다음에 '-'가 나타나며, 마지막으로 다섯자리의 숫자로 끝나는 텍스트

    11-22222, 12-12345, ...

    \d{2,}

    두 자리 이상의 숫자인 텍스트

    12, 123, 1234, ...

    (x|y)a

    첫 번째 문자가 'x'와 'y' 중 하나이며, 두 번째 문자는 'a'인 텍스트 

    xa, ya

    (x|y)+a

    'x'와 'y'중 하나의 문자가 1번 이상 나타나며, 마지막은 'a'로 끝나는 텍스트

    xa, ya, xxa, yya, xya, ...

    (xy){3}a

    'xy' 문자열이 3번 반복되고, 마지막은 'a'로 끝나는 텍스트

    xyxyxya

    [a-c]x

    첫 번째 문자가 'a'부터 'c'까지의 문자이며, 마지막은 'x'로 끝나는 텍스트

    ax, bx, cx


    다음 예제는 새로운 단순 타입 요소인 <init>요소를 선언하는 예제이다.


    예제

    <xs:element name="init">

    <xs:simpleType>

    <xs:restriction base="xs:string">

    <xs:pattern value="[a-zA-Z][a-zA-Z]"/>

    </xs:restriction>

    </xs:simpleType>

    </xs:element>


    위의 예제에서 선언된 <init> 요소에는 정확히 두 자리의 영문자로 이루어진 값만을 대입할 수 있다.

    <init>요소에 대입할 수 있는 유효한 값을 예로 들어보면 'ab', 'az', 'Az', 'bF' 등이 있다.


    다음 예제는 새로운 단순 타입 요소인 <camel>요소를 선언하는 예제이다.


    예제

    <xs:element name="camel">

    <xs:simpleType>

    <xs:restriction base="xs:string">
        <xs:pattern value="([A-Z][a-z])+"/>

    </xs:restriction>

    </xs:simpleType>

    </xs:element>


    위의 예제에서 선언된 <camel> 요소에는 영문 대문자와 영문 소문자로 이루어진 한 쌍 이상의 텍스트만을 대입할 수 있다.

    즉, <camel>요소에 대입할 수 있는 유효한 값에는 'Ad', 'BcDd', 'ZaGdEi' 등이 있다.



    공백(whitespace)에 대한 제한



    <whiteSpace>제한을 사용하면 공백을 어떤 식으로 다룰지를 명시할 수 있다.

    이 제한의 value 속성값은 다음과 같은 값을 가질 수 있따.


    • preserve : 어떠한 공백도 제거하지 않는다.
    • replace : 모든 종류의 공백(line feeds, carriage returns, tabs, spaces)을 띄어쓰기로 모두 대체한다.
    • collapse : 모든 종류의 공백은 띄어쓰기로 모두 대체되고, 문자열 앞뒤의 여백도 제거되며, 많은 수의 띄어쓰기는 하나의 띄어쓰기로 변환된다.


    다음 예제는 새로운 단순 타입 요소인 <white>요소를 선언하는 예제이다.


    예제

    <xs:element name="white">

    <xs:simpleType>

    <xs:restriction base="xs:string">

    <xs:whiteSpace value="replace"/>

    </xs:restriction>

    </xs:simpleType>

    </xs:element>


    위의 예제에서 선언된 <white>요소에 포함된 모든 종류의 공백은 모두 띄어쓰기로 대체될 것이다.



    XSD 제한(facets)




    제한

    설명

    length

    허용되는 문자열의 길이나 리스트 요소의 수를 명시함. (반드시 0과 같거나 0보다는 커야 함)

    maxLength

    허용되는 문자열의 최대 길이나 리스트 요소의 최대값을 명시함. (반드시 0과 같거나 0보다는 커야 함) 

    minLength

    허용되는 문자열의 최소 길이나 리스트 요소의 최소값을 명시함. (반드시 0과 같거나 0보다는 커야 함) 

    maxExclusive

    허용치의 상한값을 명시함. (모든 값은 반드시 이 값보다 작아야 함)

    maxInclusive

    허용치의 상한값을 명시함. (모든 값은 반드시 이 값과 같거나 이 값보다 작아야 함)

    minExclusive

    허용치의 하한값을 명시함.  (모든 값은 반드시 이 값보다 커야 함)

    minInclusive

    허용치의 하한값을 명시함. (모든 값은 반드시 이 값과 같거나 이 값보다 커야 함)

    enumeration

    허용되는 값의 리스트를 정의함.

    pattern

    텍스트 데이터의 형식을 정규 표현식을 이용하여 정의함.

    whiteSpace

    공백이 어떻게 다루어질지를 명시함. (line feeds, carriage return, table, spaces)

    fractionDigits

    허용되는 소수부의 자릿수를 명시함. (반드시 0과 같거나 0보다는 커야 함)

    totalDigits

    허용되는 자릿수를 명시함. (반드시 0보다는 커야 함)





    728x90
    반응형

    'Mark Up > XML' 카테고리의 다른 글

    XSD 복합 타입  (0) 2018.11.12
    XML/XSD  (0) 2018.11.12
    XML/DTD  (0) 2018.11.09
    XML/XPath  (0) 2018.11.09
    XML 노드  (0) 2018.11.05
상단으로