IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  XML  >

Tip: XML Schema Standard Type Library 사용하기 (한글)

스키마 정의를 사용하여 일상적인 밸리데이션을 쉽게!

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

샘플 코드

영어원문

영어원문


제안 및 의견
피드백

난이도 : 초급

Nicholas Chase, Writer, Freelance

2007 년 9 월 18 일

XML 밸리데이션으로 유효한 데이터를 정의하는 복잡한 규칙을 만들 수 있습니다. 하지만, 사용하지 않는다면 아무 소용이 없습니다. 이 글에서, XML Schema Standard Type Library를 사용하여 이메일 주소와 전화 번호 같은 데이터 포맷 프로세스를 단순화 하는 방법을 배워봅시다.
소셜 북마크

mar.gar.in mar.gar.in
digg Digg
del.icio.us del.icio.us
Slashdot Slashdot

여러분은 최소한 XML을 이해하고 있고, XML Schema에 어느 정도는 익숙해야 한다. 본 예제는 XForms를 사용하지만, XForms를 완벽히 이해 할 필요는 없다. (예제를 실행하려면, http://www.mozilla.org/projects/xforms/에서 Firefox용 XForms 확장을 다운로드 하라.)

XML의 유효성 검사 기능 또는 유형에 기반하여 제한 조건을 만족시키는지를 확인하는 기능은 이 언어 자체에 포함되어 있다. Document Type Definitions는 XML 스팩의 일부이다. 오래 전에는, 더 많은 유연성과 힘이 필요했기 때문에, XML Schema가 탄생했다. XML Schema는 다양한 스팩으로 정의를 만들어 낼 수 있다. 엘리먼트가 특정 개수의 추가 엘리먼트를 포함해야 한다거나, 애트리뷰트에 날짜 값, 특정 패턴을 따르는 텍스트, 다양한 기타 구조를 포함하도록 지정할 수 있다.

다음 XForms 폼을 생각해 보자. (Listing 1)


Listing 1. 기본 폼
                
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"       
      xmlns:xforms="http://www.w3.org/2002/xforms"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<head>
    <title>Contact Form</title>

    <xforms:model>

       <xforms:instance id="content">
          <contact xmlns="">
             <name />
             <email />
             <phone />
          </contact>
       </xforms:instance>

       <xforms:submission id="submitContact" method="post" 
                                             action="." />

    </xforms:model>

    <link href="gen_default.css" rel="stylesheet"/> 

</head>
<body>

    <h1 align="center">Contact information</h1>

    <xforms:input ref="/contact/name">
        <xforms:label>Name: </xforms:label>
    </xforms:input>
    <br />
    <xforms:input ref="/contact/email">
        <xforms:label>Email: </xforms:label>
    </xforms:input>
    <br />
    <xforms:input ref="/contact/phone">
        <xforms:label>Phone: </xforms:label>
    </xforms:input>
    <br />
    <xforms:submit submission="submitContact">
       <xforms:label>Submit</xforms:label>	
    </xforms:submit>
</body>
</html>

이 폼은 매우 단순하다. 사용자의 이름, 이메일 주소, 전화번호만 찾는다. (그림 1)


그림 1. 폼
폼

이 경우, 이메일과 전화번호용 엔트리가 유효 이메일 주소와 전화번호가 되도록 제한하거나 적어도, 올바른 폼으로 되어 있는 것으로 제한하는 것이 도움이 된다. 이렇게 하려면 문서에 스키마를 추가해야 한다. (Listing 2)


Listing 2. 스키마 추가하기
                
...

    <xforms:model>

         <xsd:element name="contact">
            <xsd:complexType>
               <xsd:element name="name" xsd:type="xsd:string" />
               <xsd:element name="email" />
               <xsd:element name="phone" />
            </xsd:complexType>
         </xsd:element>

       </xsd:schema>

       <xforms:instance id="content">
          <contact xmlns="">
             <name />
             <email />
             <phone />
          </contact>
       </xforms:instance>
...

그리고 나서, 사용자에게 이러한 엔트리들이 무효할 경우를 알려주는 이벤트를 추가할 수 있다. (소스 코드 보기)

이메일과 전화번호 정의는 현재 어떤 유형도 첨부되어 있지 않다. 이러한 유형을 검사하는 것이 더 많은 문제들을 일으키기 때문이다. 이메일 주소는 여러 폼들을 가질 수 있다. 표준 포맷도 있다. 전화번호도 마찬가지다. "with area code", "without area code", "with extension" 같은 무한한 변수를 사용할 수 있고, 이는 국가 코드도 고려하지 않는다.

이 모든 것을 누가 하고 싶겠는가? 필자는 확실히 이를 거부한다. 다행히도, 전화번호와 이메일 주소 같은 공통 유형의 라이브러리가 있다. http://www.codesynthesis.com/projects/xsstl/에서 XML 스키마 표준 유형 라이브러리를 다운로드 할 수 있다. 이것을 자신의 스키마에 추가할 때에는 올바른 네임스페이스와 문서를 가져오는지가 중요하다. (Listing 3)


Listing 3. 스키마 정의 가져오기
                
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"       
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xforms="http://www.w3.org/2002/xforms"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:stl="http://www.codesynthesis.com/xmlns/xsstl">

<head>
    <title>Contact Form</title>

    <xforms:model>

       <xsd:schema targetNamespace=""
            xmlns:stl="http://www.codesynthesis.com/xmlns/xsstl">

         <xsd:import 
            namespace="http://www.codesynthesis.com/xmlns/xsstl"
            schemaLocation="xsstl.xsd"/>

         <xsd:element name="contact">
            <xsd:complexType>
               <xsd:element name="name" xsd:type="xsd:string" />
               <xsd:element name="email" xsd:type="stl:EmailAddress" />
               <xsd:element name="phone" xsd:type="stl:PhoneNumber" />
            </xsd:complexType>
         </xsd:element>

       </xsd:schema>

       <xforms:instance id="content">
          <contact xmlns="">
             <name />
             <email />
             <phone />
          </contact>
       </xforms:instance>

       <xforms:bind nodeset="/contact/email"
		 type="stl:EmailAddress"/>

       <xforms:bind nodeset="/contact/phone"
		 type="stl:PhoneNumber"/>

       <xforms:submission id="submitContact" method="post" 
                                             action="." />
...

XForms 폼에 포함된 것 말고도 다른 스키마 문서에서도 여기에서 선보인 기술을 사용할 수 있다. 올바른 네임스페이스 앨리어스를 정의해야 하고(이 경우, stl:), 실제 네임스페이스와 스키마 문서를 가져와야 한다. 그리고 나서, 다른 스키마 정의 유형들과 마찬가지로 그러한 유형들을 사용한다. 이 경우, 이 폼은 EmailAddressPhoneNumber 유형을 사용한다.

이 예제에서는 메인 문서를 가져오면서, 이 모든 유형을 사용할 수 있도록 했다. 하지만, 실제로 필요한 문서만 가져올 수 있다. XML Schema Standard Type Library에는 단일 유형을 가진 여러 문서들이 포함되어 있다.

  • email-address.xsd: 데이터를 표준 이메일 주소로 제한하는 EmailAddress 유형.
  • percentage.xsd: 0부터 100까지의 숫자를 나타내는 Percentage 유형.
  • iso3166-country-code.xsd: ISO3166CountyCode는 데이터를 두 문자 스트링으로 제한하고, ISO 3166-1 국가 코드 중 하나가 되어야 한다.
  • rfc822-date-time.xsd: RFC822DateTime 유형은 데이터가 RFC822에 의해 지정된 것처럼 올바르게 포맷되어야 한다.

다른 문서에는 단일 유형에 대한 변화가 포함되어 있다.

  • ipv4-address.xsd: 이 파일에는 IPv4Address, Port, IPv4Endpoint 같은 엔드포인트에 대한 변이가 포함되는데, 이는 올바른 IP 주소(dot 표기)와 포트를 나타낸다. 또한 단일 스트링이 아닌 데이터의 struct 버전인 IPv4EndpointStruct도 포함된다.
  • phone-number.xsd: 이 문서는 PhoneCountryCode, PhoneAreaCode, PhoneSubscriberNumber, PhoneExtensionNumber, as well as PhoneNumber 같은 전화번호의 다양한 부분들, 이 모든 것을 결합하고 적어도 등록자 번호만이라도 요구하는 단일 스트링인 PhoneNumber, 부분들과 개별 엘리먼트를 분리하는 struct인 PhoneNumberStruct를 지정한다.
  • 이 문서에는 USStateTerritoryCode (50 개의 주, 아홉 개의 미국 영토 포함), USStateCode (주, Washington, DC), USTerritoryCode (DC가 아닌 US Virgin Islands 같은 영토),USContinentalStateCode (DC를 포함하고 Hawaii를 제외한 모든 주), USContiguousStateCode (Hawaii와 Alaska를 제외하고, DC를 포함한 모든 주)를 포함하여 "미국 주(US state)"의 정의에 대한 다양한 변화가 포함되어 있다.

요약

XML Schema Standard Type Library는 모듈식의 정의를 만드는 하나의 예이다. 이것을 자신의 고유 스키마로 가져오면, 직접 정의하지 않고도 이러한 유형들을 사용할 수 있다.





위로


다운로드 하십시오

설명이름크기다운로드 방식
샘플 코드x-tipxsslt-source.zip1KBHTTP
다운로드 방식에 대한 정보


참고자료

교육

제품 및 기술 얻기

토론


필자소개

Nicholas Chase는 루슨트 테크놀러지스, 썬 마이크로시스템즈, 오라클 및 탬파베이 버커니어스와 같은 회사의 웹 사이트 개발에 참여해왔다. Nick은 고등학교 물리 교사를 비롯, 저준위(low-level) 핵 폐기물 시설 매니저, 온라인 과학소설 잡지 편집자, 멀티미디어 엔지니어, 오라클 강사, 그리고 한 회사의 CTO 등을 맡기도 했다. 그는 XML Primer Plus(Sams)를 비롯한, 다양한 책의 저자이기도 하다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



아니오잘 모르겠음
 


 


12345
 



위로


developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의