[웹 서비스 개발] XML Schema - (2)

김광일·2024년 9월 27일

웹 서비스 개발

목록 보기
14/45
post-thumbnail

2. Restriction

[1] Restriction란?

  • 정의: Restriction은 XML 요소나 속성에 대해 허용되는 값을 정의하는 데 사용된다. 이를 통해 데이터의 유효성을 검사하고, 특정 데이터 형식을 강제할 수 있다.
  • Facets: XML 요소에 대한 제한을 적용할 때 사용하는 속성을 facets라고 하며, 이들은 데이터 유형을 더 구체적으로 정의하는 데 도움을 준다.
    • 예를 들어, 특정 값의 범위, 길이, 패턴 등을 제한할 수 있다.

[2] XSD Simple Element

1) 의미

  • 정의: simple element는 텍스트만 포함하는 XML 요소이다.
    • 이 요소는 다른 요소나 속성을 포함할 수 없으며, 단순히 값을 표현하는 데 사용된다.

2) 특징

  • 데이터 유형: simple element의 텍스트는 다양한 유형일 수 있다.
    • 이는 XML 스키마 정의(XSD)에 포함된 여러 데이터 유형 중 하나일 수 있으며, 예를 들어 boolean, string, date, decimal 등과 같은 기본 데이터 유형을 포함한다.

3) 예시

<xs:element name="xxx" type="yyy"/>
  • 설명: 이 코드에서 xxx는 XML 요소의 이름이며, yyy는 이 요소의 데이터 유형입니다. xxx 요소는 텍스트만 포함하고, 그 텍스트는 yyy로 정의된 데이터 유형의 규칙에 따라야 합니다.

[3] 기본 제공 데이터 유형

  • xs : string
  • xs : decimal
  • xs : integer
  • xs : boolean
  • xs : date
  • xs : time

[4] simple elements의 deafult and fixed 값


<xs:element name = "lastname" type = "xs:string" default = "Brown"/>
<xs:element name = "lastname" type = "xs:string" fixed = "Brown"/>

[5] XSD Attributes (속성)

1) 특징

  • 모든 속성은 simple type으로 선언된다.
    : XML 스키마에서 속성은 항상 단순 타입으로 정의된다(예: string, boolean).
  • simple 요소는 속성을 가질 수 없다.
    : 텍스트만 포함하는 simple 요소는 속성을 추가할 수 없습니다. (예: <xs:element name="title" type="xs:string" />)
  • 요소에 attribute가 있는 경우 복잡한 유형으로 간주된다.
    • 속성이 있는 요소는 복잡한 유형으로 간주된다.
    • 이 경우 <xs:complexType>을 사용하여 속성과 다른 요소를 포함할 수 있다.
    • 예:
      <xs:element name="book">
        <xs:complexType>
          <xs:attribute name="isbn" type="xs:string" />
        </xs:complexType>
      </xs:element>
  • 그러나 속성 자체는 항상 simple types로 선언된다.
    • 속성은 다른 요소를 가질 수 없고, 항상 단순 타입으로만 선언됩니다.

2) 형태

(1) attribute 자체에 대한 형태
<xs:attribute name = "xxx" type = "yyy"/>
(2) attribute를 감싸는 구조
<xs:element name="body">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="day" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>
  • complexType: 요소가 다른 요소나 속성을 포함할 수 있는 복잡한 구조를 정의한다.
  • simpleContent: 요소가 텍스트와 속성을 동시에 포함할 수 있도록 한다.
  • extension: 기존 데이터 유형을 확장하여 새로운 속성을 추가할 수 있다. base 속성을 사용하여 확장할 기본 유형을 정의한다.

3) type의 종류

  • xs : string
  • xs : decimal
  • xs : integer
  • xs : boolean
  • xs : date
  • xs : time

4) 예시

(1) note.xml
<?xml version="1.0" encoding="UTF-8"?>
<note
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="note.xsd">
    <to>Eugene</to>
    <from>Brown</from>
    <heading>Dinner Appointment</heading>
    <body day="Friday">6 PM at Pine Hill</body>
</note>
(2) note.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="to" type="xs:string" />
        <xs:element name="from" type="xs:string" />
        <xs:element name="heading" type="xs:string" />
        <xs:element name="body">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="day" type="xs:string" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
(3) 의미
  • 요소 정의 : body라는 이름의 요소를 정의하고 있다.
  • complexType : body 요소는 복잡한 유형으로 정의되어 있으며, 다른 요소나 속성을 가질 수 있다.
  • simpleContent : 이 요소는 텍스트(단순 내용)와 함께 속성을 가질 수 있다.
  • extension : xs:string이라는 기본 유형을 확장하여 day라는 이름의 속성을 추가한다. 이 속성은 문자열(xs:string) 유형이다.
    • base 속성을 사용하여 확장할 기본 유형을 지정한다.

[6] Restriction on Values

1) 형태

<xs:element name="body">
  <xs:simpleType>
      <xs:restriction base="xs:integer">
        <xs:minInclusive value = "0" />
        <xs:maxInclusive value = "120" />
      </xs:restriction>
  </xs:simpleType>
</xs:element>
  • 요소 정의 : body라는 이름의 요소를 정의한다.
  • 단순 타입 : 이 요소는 xs:integer(정수) 유형으로 제한된다.
  • 제한 조건
    • minInclusive: 값이 0 이상이어야 함을 지정한다.
    • maxInclusive: 값이 120 이하이어야 함을 지정한다.

2) 의미

: XML 요소 또는 속성에 대해 허용되는 값을 정의하는 데 사용된다.

  • XML 요소에 대한 제한을 facets라고 한다.

profile
안녕하세요, 사용자들의 문제 해결을 중심으로 하는 프론트엔드 개발자입니다. 티스토리로 전환했어요 : https://pangil-log.tistory.com

0개의 댓글