 |  |
|
난이도 : 초급 Nicholas Chase, Writer, Freelance
2007 년 9 월 18 일 XML 밸리데이션으로 유효한 데이터를 정의하는 복잡한 규칙을 만들 수 있습니다. 하지만, 사용하지 않는다면 아무 소용이 없습니다. 이 글에서, XML Schema Standard Type Library를 사용하여 이메일 주소와 전화 번호 같은 데이터 포맷 프로세스를 단순화 하는 방법을 배워봅시다.
여러분은 최소한 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:), 실제 네임스페이스와 스키마 문서를 가져와야 한다. 그리고 나서, 다른 스키마 정의 유형들과 마찬가지로 그러한 유형들을 사용한다. 이 경우, 이 폼은 EmailAddress와 PhoneNumber 유형을 사용한다.
이 예제에서는 메인 문서를 가져오면서, 이 모든 유형을 사용할 수 있도록 했다. 하지만, 실제로 필요한 문서만 가져올 수 있다. 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.zip | 1KB | HTTP |
|---|
참고자료 교육
-
Xerces-Java 2의 XML Schema 밸리데이션 (Nicholas Chase, developerWorks, 2002년 7월)
-
XForms 소개, Part 1: 폼을 위한 새로운 웹 표준 (Chris Herborth, developerWorks, 2006년 9월): 차세대 웹 기반 데이터 프로세싱인 XForms가 어떻게 작동하는지를 배워본다. Firefox와 IE로 XForms를 설정하여 XForms 샘플을 볼 수 있다.
-
XML Schema
Recommendation: XML Schema 장치, XML Schema 언어를 사용하여 스키마 만드는 방법.
-
XForms Recommendation: XHTML 폼 소개, XForms 모델, 인스턴스 데이터, 사용자 인터페이스 등.
-
IBM XML 인증: XML 및 관련 기술에 대한 IBM 인증 개발자 되기.
-
XML 기술 자료: developerWorks XML 존에서 광범위한 기술 자료, 팁, 튜토리얼, 표준, IBM Redbook을 볼 수 있다.
-
developerWorks 기술이벤트와 웹캐스트
-
technology
bookstore
제품 및 기술 얻기
토론
필자소개  | |  | Nicholas Chase는 루슨트 테크놀러지스, 썬 마이크로시스템즈, 오라클 및 탬파베이 버커니어스와 같은 회사의 웹 사이트 개발에 참여해왔다. Nick은 고등학교 물리 교사를 비롯, 저준위(low-level) 핵 폐기물 시설 매니저, 온라인 과학소설 잡지 편집자, 멀티미디어 엔지니어, 오라클 강사, 그리고 한 회사의 CTO 등을 맡기도 했다. 그는 XML Primer Plus(Sams)를 비롯한, 다양한 책의 저자이기도 하다. |
기사에 대한 평가
|  |