메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

InfoSphere Business Glossary REST API를 사용하여 Web 2.0 애플리케이션 개발하기

Gabi Nativ, 소프트웨어 개발자, IBM
Gabi Nativ는 IBM Israel Software 랩의 IBM InfoSphere Business Glossary 팀에서 재직하는 소프트웨어 개발자이다. Gabi는 Hebrew University of Jerusalem에서 전산학 학사 학위를 받았고 소프트웨어 개발의 분야에서 5년 이상의 경력이 있다. 그는 2년 이상 웹 애플리케이션 개발에 참여해 왔다. 그의 주된 관심사는 Java 및 Web 2.0 기술이다.
Michael Fankhauser, 실용설계자, <a href="http://www.ibm.com/">IBM</a>
Michael Fankhauser는 IBM Israel Software 랩에서 Business Glossary 기능의 사용자 경험 아키텍트이다. Michael은 2006년에 Unicorn Solutions이 합병되면서 IBM에 합류했다. 그는 University of Wisconsin-Madison에서 심리학 학사 학위가 있다.

요약: 

IBM InfoSphere Business Glossary를 통해 사용자는 엔터프라이즈 어휘 및 분류 시스템을 작성하고 관리하며 공유할 수 있습니다. 버전 8.1.1에서 Business Glossary 팀은 특정 필요에 따라 사용자 정의 애플리케이션의 개발을 사용하여 용어집 내용을 사용하기에 더 간편하게 만드는 REST API를 소개했습니다.

이 기사는 다양한 Web 2.0 기술과 관련하여 IBM InfoSphere Business Glossary REST API를 사용하는 휴대용의 동적인 읽기-쓰기 위젯을 개발하는 방법에 대한 단계별 지침을 제공합니다. 위젯을 통해 사용자들은 용어를 찾고, 용어의 세부사항을 조사하며, 기본 편집을 작성합니다.

여기에서의 목표는 InfoSphere Business Glossary 고객들이 자체적인 사용자 정의 애플리케이션을 작성하도록 REST API를 사용하기 위한 자극제로서 이러한 샘플 위젯을 빌드하여 확보한 지식을 사용하는 것입니다. 이 기사는 Web 2.0 기술에 익숙한 소프트웨어 엔지니어와 여기에 제공된 도구를 실제 상황에 적용할 수 있는 제품 설계자를 대상으로 합니다. [2010년 1월 20일: 지침의 다운로드를 추가하고 처음으로 참고자료를 업데이트함. --Ed]

원문 게재일:  2011 년 1 월 20 일 (출판일: 2011 년 7 월 12 일)
난이도: 중급 원문:  보기 PDF:  A4 and Letter (273KB | 20 pages)Get Adobe® Reader®
페이지뷰:  1236 회
의견:  


선수조건

이 기사는 웹 프로그래밍 기술(HTML, JavaScript, Ajax, XML, XSLT)의 기본적인 이해를 갖추고 Dojo JavaScript 툴킷으로 위젯을 개발한 경험이 있는 개발자를 대상으로 한다. 샘플 위젯을 배치하려면 IBM WebSphere® Application Server에서 웹 애플리케이션 WAR을 배치하기 위해 필요한 기본적인 관리 기술과 권한이 필요할 것이다. Business Glossary REST API는 IBM InfoSphere 제품의 지원되는 일부이다. 이 기사에서의 단계를 따라 개발하는 다른 클라이언트측 컴포넌트는 일반 웹 프로그래밍 기술을 기반으로 하지만, IBM 제품의 일부로 공식적으로 지원되지 않는다.

개요

IBM InfoSphere Business Glossary를 통해 사용자는 엔터프라이즈 어휘 및 분류 시스템을 작성하고 관리하며 공유할 수 있다. Business Glossary는 서비스를 기반으로 하는 REST(Representational State Transfer)를 사용하는 API를 통해 풍부한 기능을 드러낸다. REST는 애플리케이션을 신속하게 빌드하기 위해 Web 2.0 기술의 기초적인 이해를 갖춘 개발자를 허용하는 웹 서비스를 설계하기 위한 열린 아키텍처형 스타일이다.

이 기사는 어느 웹 페이지에서나 임베드할 수 있는 REST 기반 컴포넌트를 빌드하는 방법에 대한 단계별 지침을 제공한다. 샘플 컴포넌트는 BGTerm Finder 위젯이라고 한다. 이는 회사의 비즈니스 어휘를 신속하게 검색하고 수정할 수 있는 경량형 도구이다.

컴포넌트를 사용할 수 있는 방법을 시연하는 두 가지 샘플 비즈니스 시나리오는 다음과 같다.

  • 주제 전문가인 Tom은 자신의 회사의 비즈니스 용어집을 검토하고 Actual Net Present Value 용어의 정의가 정확하지 않음을 확인하고 놀랐다. 그는 즉시 BGTerm Finder widget 위젯을 사용하여 해당 용어를 검색하고 실시간으로 이를 편집하여 정의를 수정한다.
  • 영업 담당자인 Lorraine은 비즈니스 인텔리전스 보고서를 읽는 중에 Actual Net Present Value라는 구절을 보게 되었다. 그녀는 이 용어가 자신의 회사에서 구체적으로 어떻게 정의되고 있는지 이해해야 한다. 그녀는 BGTerm Finder 위젯을 사용하여 해당 용어를 검색하고 그 문맥과 정의를 조사한다.

그림 1은 BGTerm Finder 위젯의 두 가지 스크린샷을 보여준다. 첫 번째 스크린샷은 사용자가 "act" 문자열에서 검색하여 Actual Net Present Value 용어의 자세한 보기를 열었음을 보여준다. 두 번째 스크린샷은 사용자가 용어를 편집하기 위해 아이콘을 클릭하였음을 보여준다.


그림 1. BGTermFinder 위젯 스크린샷
BGTerm Finder 위젯의 스크린샷. 첫 번째는 검색을 묘사하고 두 번째는 편집을 묘사한다.

REST API

Business Glossary REST API를 통해 클라이언트 애플리케이션은 비즈니스 용어집 내용을 액세스하고 작성할 수 있다. REST는 다른 분배된 기술에 대해 제공하는 몇 가지 장점 때문에 API를 위해 선택한 기술이다. 가장 중요한 점은 경량이고 상호운용 가능하다는 것이다.

API는 자원으로 용어집 내용을 노출한다. 이러한 자원은 URI를 사용하여 처리되고 서버에 상주하는 XML 스키마로 정의되는 XML 문서로 표현된다.

API 자원

Business Glossary REST API로 수신할 수 있는 자원은 다음 두 가지 주요 세트로 구분된다.

  • 엔티티 자원 세트 — 이 자원 세트는 카테고리, 용어, 스튜어드(steward), 사용자 정의 속성 및 추가 자산과 같이 Business Glossary 엔티티에 대한 자세한 정보가 들어있다. 이러한 모든 엔티티는 Read API로 지원된다. 카테고리, 용어 및 사용자 정의 속성은 Write API와 해당 작성, 업데이트 및 삭제 기능으로도 지원된다. 자세한 정보는 REST API 문서를 참조한다.
  • 조작적 자원 세트 — 이 자원 세트는 다음과 같이 클라이언트 애플리케이션을 개발하는 데 사용이 편리한 일반적 조작을 지원한다.
    • 자동완성. 접두부를 고려하여 용어집의 완성 제안(와일드카드가 지원됨).
    • 어디서나 검색. IBM InfoSphere Business Glossary Anywhere에 사용된 것과 유사한 검색 알고리즘(와일드카드는 지원되지 않음).
    • 검색. 이 조작은 특정 패턴에 대한 용어집의 검색을 사용한다. 사용자는 검색된 기능과 클래스 및 결과의 순위 지정을 제어할 수 있다(와일드카드가 지원됨).

API 트랜잭션

API 트랜잭션은 HTTP 요청 및 응답을 구성한다. 다른 조작들은 요청에서 HTTP 메소드의 다른 종류를 요청한다. URI와 HTTP 메소드의 결합은 어떠한 조작이 발생할 지를 정의한다. REST 인터페이스는 다음 HTTP 메소드를 제공한다.

  • POST— 자원 작성
  • GET— 자원 읽기
  • PUT— 자원 업데이트
  • DELETE— 자원 삭제

위젯 설계

샘플 BGTerm Finder 위젯은 웹 애플리케이션에 대해 Model-View-Controller(MVC) 아키텍처형 패턴을 따른다. 각 계층과 연관된 기술의 개요는 다음과 같다.

  • Model(XML) — 올바르게 정의된 API XML 자원이 데이터 모델을 표현한다.
  • View(HTML+CSS) — 위젯의 HTML은 구조를 제공하는 반면 CSS는 스타일링을 처리한다.
  • Controller(JavaScript) — 위젯의 JavaScript 코드는 다음을 수행한다.
    • 사용자 이벤트를 처리한다
    • AJAX를 사용하여 자원을 REST API 안밖으로 전달한다
    • XSL 변환을 사용하여 XML 자원을 HTML 단편으로 변환한다
    • 이러한 단편들을 DOM에 삽입한다
    • 사용자 인터페이스를 조작한다

그림 2. 위젯 설계
위젯 컴포넌트 사이 및 위젯의 REST API Client와 REST API 사이의 상호작용 묘사.

Model(XML)

위젯 모델은 REST API로 리턴되는 XML 자원이다. 이러한 자원은 REST API와 함께 서버에 상주하는 XML 스키마로 정의되는 XML 문서이다. 샘플 위젯은 searchResource 및 termResource 자원을 사용한다.


목록 1. 검색 자원 모델 XML
				
<?xml version="1.0" encoding="UTF-8"?>
<searchResource xmlns="http://www.ibm.com/is/bg/rest" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.ibm.com/is/bg/rest 
http://bghost:9080/bgrestapi/xsd/searchResource.xsd">
	<searchInput>
	<pattern>sa*</pattern>
		<queriedClasses>
			<value>term</value>
		</queriedClasses>
		<queriedFeatures>
			<value>name</value>
		</queriedFeatures>
		<status>
			<value>ACCEPTED</value>
			<value>STANDARD</value>
			<value>CANDIDATE</value>
			<value>DEPRECATED</value>
		</status>
		<stopAfterFirstFieldMatch>false</stopAfterFirstFieldMatch>
	</searchInput>
	<results>
		<searchResultItem>
			<glossaryObject class="term">
				<name>Satisfaction Rating Date</name>
				<uri>bgrestapi/term/b1c497ce.e1b1ec6c.232160ba.»
06b1b806-d928-48d3.b91b.222f3e221b7c</uri>
				<context>
					<category>
						<name>Customer</name>
						<uri>bgrestapi/category/b1c497ce.»
ee6a64fe.f1020ba.46e95446-d922-42ba.9ae4.2440d424e432</uri>
					</category>
				</context>
			</glossaryObject>
			<foundInFields>
				<field name="name" value="Satisfaction Rating Date"/>
			</foundInFields>
			<rank>1</rank>
		</searchResultItem>
	</results>
	<pagination>
		<pageNumber>1</pageNumber>
		<pageSize>10</pageSize>
		<numberOfPages>1</numberOfPages>
		<numberOfResults>1</numberOfResults>
	</pagination>
</searchResource>
			


목록 2. 용어 자원 모델 XML
				
 <?xml version="1.0" encoding="UTF-8"?>
<termResource xmlns="http://www.ibm.com/is/bg/rest" .»
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" »
 xsi:schemaLocation="http://www.ibm.com/is/bg/rest .»
 http://bghost:9080/bgrestapi/xsd/termResource.xsd">
	<term>
		<name>Satisfaction Rating Date</name>
		<uri>bgrestapi/term/b1c497ce.e1b1ec6c.232160ba.»
06b1b806-d928-48d3.b91b.222f3e221b7c</uri>
		<context>
			<category>
				<name>Customer</name>
				<uri>bgrestapi/category/b1c497ce.ee6a64fe.f1020ba.»
46e95446-d922-42ba.9ae4.2440d424e432</uri>
			</category>
		</context>
		<authorization>RWD</authorization>
		<createdBy>
			<uri>bgrestapi/user/bob</uri>
			<id>builder</id>
		</createdBy>
		<createdOn>2009-05-04 04:01:59 PDT</createdOn>
		<modifiedBy>
			<uri>bgrestapi/user/bgauthor</uri>
			<id>bgauthor</id>
		</modifiedBy>
		<modifiedOn>2009-07-08 07:28:42 PDT</modifiedOn>
		<assignedTerms/>
		<shortDescription>The date on which the modern Satisfaction Rating was .»
assigned to the Customer.</shortDescription>
		<longDescription>The date on which the Satisfaction Rating was assigned.»
to the Customer.</longDescription>
		<notes/>
		<customAttributes/>
		<steward class="user">
			<name>Jeff Blight Jeff Blight</name>
			<uri>bgrestapi/user/Jeff+B</uri>
			<id>Jeff B</id>
		</steward>
		<parentCategory>
			<name>Customer</name>
			<uri>bgrestapi/category/b1c497ce.ee6a64fe.f1020ba.»
46e95446-d922-42ba.9ae4.2440d424e432</uri>
		</parentCategory>
		<status>STANDARD</status>
		<abbreviation/>
		<additionalAbbreviation/>
		<example/>
		<usage/>
		<isModifier>false</isModifier>
		<type>NONE</type>
		<replacedByTerm/>
		<referencedByCategories/>
		<relatedTerms/>
		<replacedTerms/>
		<synonyms/>
		<isPreferredSynonymInGroup>false</isPreferredSynonymInGroup>
		<preferredSynonym/>
		<assignedAssets/>
	</term>
</termResource>

			


View(HTML+CSS)

이전 섹션에서 설명한 XML 모델은 HTML 단편으로 변환되어 위젯 DOM으로 삽입된다.

어느 웹 페이지에서나 임베드될 수 있는 위젯을 개발하는 중이기 때문에, 브라우저 자원을 절약하고 포함하는 문서와의 충돌을 방지하려고 한다. HTML 및 CSS 코드가 이를 달성하는 방법의 예제는 다음과 같다.

  • ID가 아니라 단편 삽입이 용이하도록 Dojo 접속 지점 및 접속 이벤트를 활용한다
  • 특정 접두부가 있는 고유 CSS 클래스 이름을 사용한다
  • HTML 공간을 최소화하기 위해 Dojo JavaScript 툴킷을 사용한다

목록 3. 위젯 HTML 템플릿
<div class="bgTermFinderWidget_main"
	dojoAttachEvent="onclick : clickHandler">
<h1>InfoSphere <a dojoAttachPoint="bg_link" href="#"
	target="_blank" title="Go To Business Glossary Browser">Business
Glossary</a> : Term Finder <img class="bgTermFinderWidget_logo"
	src="${imagesPath}/ibm_logo_white.gif" /></h1>
<div class="bgTermFinderWidget_ds">
<div class="bgTermFinderWidget_search">
<div class="bgTermFinderWidget_tempText" dojoAttachPoint="tempText"
	dojoAttachEvent="onclick: trySetFocus">Start typing to search...</div>
<input type="text" dojoAttachPoint="searchinput"
	dojoAttachEvent="onblur:stopTimer,onfocus:startTimer" value="" /> <img
	class="bgTermFinderWidget_searchloader" dojoAttachPoint="searchloader"
	src="${imagesPath}/loading.gif" style="display: none" /></div>
<div class="bgTermFinderWidget_resultsPanel">

<div class="bgTermFinderWidget_infoHolder" dojoAttachPoint="infoHolder">
<span class="bgTermFinderWidget_info" dojoAttachPoint="info"></span></div>

<div class="bgTermFinderWidget_searchResults"
	dojoAttachPoint="searchResults">
<div class="bgTermFinderWidget_showmore" /></div>

</div>
</div>

<div class="bgTermFinderWidget_itemloaderholder"
	dojoAttachPoint="itemloaderholder"><img
	class="bgTermFinderWidget_itemloader" dojoAttachPoint="itemloader"
	src="${imagesPath}/loading_strip_static2.gif"
	onclick="window.location.reload()"
	title="Status Indicator | Click to reload widget" /></div>
</div>
</div>

SearchResults

위젯 HTML 구조에서 주요 div는 SearchResults div이다. 이 div는 사용자가 입력한 입력에 대응하여 용어를 표시할 책임이 있다.

해당 결과는 SearchResult Model XML 형식으로 수신되어, HTML 단편으로 변환되며, SearchResults div로 추가된다.

HTML 검색 결과 단편은 Business Glossary가 사용하는 동일한 Repository ID(RID)로 고유하게 식별되는 div 태그이다. 컨트롤러는 이러한 RID를 사용하여 사용자가 요청할 때 전체 용어 자원을 얻는다. 자원의 스튜어드를 식별하는 추가 사용자 정의 HTML 속성도 사용된다.


목록 4. 검색 결과 HTML
<div dojoattachpoint="searchResults"
	class="bgTermFinderWidget_searchResults">
<div class="page">
<div class="node"
rid="bgrestapi/term/b1c497ce.e1b1ec6c.232160ba.06b1b806-d928-48d3.b91b.222f3e221b7c">
<div class="title-closed"><a class="doOpen" href="#">Satisfaction
Rating Date</a><a class="doEdit" href="#"
	title="Click to edit Description and Steward">Edit</a></div>
</div>
<div class="node"
rid="bgrestapi/term/b1c497ce.e1b1ec6c.1e1aa0bd.a73f37a7-59c2-42bf.aac9.c05e0ac0c965">
<div class="title-closed"><a class="doOpen" href="#">Source Of
Income Type Identifier</a><a class="doEdit" href="#"
	title="Click to edit Description and Steward">Edit</a></div>
</div>
<div class="node"
rid="bgrestapi/term/b1c497ce.e1b1ec6c.16dda0ba.5e5d685e-aa69-4925.afd0.e2d33ce2d0bf">
<div class="title-closed"><a class="doOpen" href="#">Special
Terms Flag</a><a class="doEdit" href="#"
	title="Click to edit Description and Steward">Edit</a></div>
</div>
</div>
<div class="bgTermFinderWidget_showmore" /></div>

결과 노드

결과 노드는 다음 단계 중 하나가 있을 수 있다.

  • 닫힘(Closed)
  • 보기를 위해 열림(Open for viewing)
  • 편집을 위해 열림(Open for editing)

각 상태는 다른 프리젠테이션이 있으며, 이는 CSS로 제어된다. 다음 세 가지 그림은 각 단계의 예제를 보여준다.


그림 6. 닫힘(Closed) — 용어 이름만 표시함
세부사항을 확인할 수 있지만 표시되지 않음을 나타내는 오른쪽으로 향하는 트위스티 아이콘이 선행되는 Satisfaction Rating Date라는 예제 용어가 표시됨

그림 7. 보기를 위해 열림(Open for viewing) — 용어 세부사항과 편집 아이콘을 표시함
편집 아이콘, 설명 및 스튜어드 이름이 있는 예제 용어. 트위스티 아이콘은 이제 용어가 열려있음을 표시하도록 아래로 향한다.

그림 8. 편집을 위해 열림(Open for editing) – 편집 제어로 편집 모드에서 용어 세부사항 및 스튜어드를 표시함
설명이 이제 편집 가능한 텍스트 필드에 있고, 스튜어드 이름이 메뉴 선택 제어에 있으며, Ok 및 Cancel로 레이블된 단추가 있다.

Controller(위젯 JavaScript 코드)

위젯의 중심 부분은 컨트롤러이다. 컨트롤러는 REST API를 호출하여 사용자 조치에 반응하는 JavaScript 코드를 구성한다. 그 다음에 DOM 조작을 사용하여 컨트롤러는 위젯 템플리트로 변환된 HTML 단편을 삽입한다.

DOM 조작 및 버블링(bubbling) 기술

컨트롤러로 수행되는 DOM 조작의 논리를 이해하기 위해 이 섹션은 Open Node 시나리오를 심도있게 살펴본다. Edit Node 시나리오는 유사한 논리를 따른다.


그림 9. 시퀀스 플로우— 노드 열기
클릭은 HTML DOM으로 삽입되는 HTML 단편이 나타나는 REST API와 위젯 사이의 이벤트의 체인을 초기화한다

사용자가 닫힌 노드를 클릭하면, 대상 노드의 onClick 이벤트는 브라우저가 위젯 컨트롤러 코드의 기본 onClick 핸들러로 버블링되게 한다. 기본 핸들러는 RID를 사용하여 대상 노드를 식별하고 적절한 핸들러 메소드를 호출한다.

이벤트 버블링 기술은 컨트롤러 코드로부터 위젯의 보기 구조를 연결 해제하는 기능을 제공한다. 해당 기술은 또한 하나의 장소에서 모든 onClick 처리 집중하기의 하나의 선택 원칙을 따른다.


목록 5. 클릭 핸들러 함수
				
clickHandler : function(evt) {
	
		var targetNode = evt.target;
		var className  = dojo.attr(targetNode,"class");		
		
		if ( className == "doOpen") {
			var div  = targetNode.parentNode.parentNode;
			this.OnItemClick( div );

		}
		else if ( className == "doEdit") {
			var div  = targetNode.parentNode.parentNode;
			
			this.OnItemEditClick( div );
		}
		else if ( className == "editOK"){
			var div  = targetNode.parentNode.parentNode.parentNode;
			this.OnEditOk (div);
		}
		else if ( className == "editCancel"){
			var div  = targetNode.parentNode.parentNode.parentNode;
			this.OnEditOk (div);
		}		
		else if ( className == "doShowMore"  ) {
			this.OnPageClick( dojo.attr( targetNode,"page") );
		}
	
		
},

	
//Method is called when user clicked to open/close the node
OnItemClick:function( div){	
								
		this._currRID  = dojo.attr(div,"rid");
		
		
		var nodesClosedTitle = dojo.query('.title-closed' , div);
		var nodesClosedBody = dojo.query('.body-closed' , div);
		
		//Node is closed and never been open				
		if ( nodesClosedTitle.length > 0 &&  nodesClosedBody.length == 0){
							

			//Performing Ajax call to term details
			this.RequestItemDetails( this._currRID );
		}
          //Node is closed and was opened before
		else if ( nodesClosedTitle.length > 0 && nodesClosedBody.length > 0){
			nodesClosedTitle[0].className = "title-open";
			nodesClosedBody[0].className = "body-open";
		}
          //Node is open 
		else{

			var nodesOpenTitle = dojo.query('.title-open' , div);
			var nodesOpenBody = dojo.query('.body-open' , div);
			
			if ( nodesOpenTitle.length > 0 && nodesOpenBody.length > 0){
				nodesOpenTitle[0].className =  "title-closed";
				nodesOpenBody[0].className = "body-closed";	
			}
		}
},

목록 6에서 볼 수 있듯이 노드가 열리지 않았다면 컨트롤러가 RestClient.requestItemDetails를 용어 세부사항을 비동기로 요청한다.


목록 6. RequestItemDetails 함수

//Performing AJAX Request to term details
RequestItemDetails:function( rid ){
 this.toggleItemLoading(1);	
 this._bgRestClient.requestItemDetails
 	( rid,this,this.itemDetailsCallback , this.onError );
},

목록 7의 코드에서 컨트롤러의 콜백 메소드는 먼저 XSLProcessor 모듈을 사용하여 HTML 단편을 생성한 다음에 대상으로 하는 노드로 이를 삽입한다.


목록 7. itemDetailsEditCallback 함수
				
//Method will be called when AJAX request to term details returns .
itemDetailsEditCallback :function( xml ) {

	//Extracting the rid of the term with XPath
	var rid = this.extractStringValue »
( xml ,"//rest:termResource/rest:term/rest:uri" );

	var div = dojo.query('div[rid=\"'+ rid +'\"]' , this.searchResults )[0];

	//Processing XML of term details to create HTML edit  fragment to be injected.�
	var element = this._bgXslProcessor.processItemDetailsEdit( xml );

	//Switching display 
	dojo.query('.doEditBussy' , div)[0].className = "doEdit";
	dojo.query('.title-open' ,div )[0].className = "title-edit";

	//Injecting the HTML fragment
	dojo.place( element , dojo.query('.body-open' ,div )[0] , "replace");
	dojo.place( this._selectTag ,dojo.query('.stewardValue' ,div )[0],"only" );
	this.toggleItemLoading(0);

},	

REST 클라이언트 모듈

위젯은 Dojo JavaScript 클래스(BGRestClient)를 사용하여 지정된 자원에 대한 비동기 REST 호출을 수행한다.

목록 8은 AJAX GET 및 PUT 비동기 호출을 수행하는 두 가지 기본 헬퍼 함수를 보여준다.


목록 8. REST 클라이언트 코드 스니펫
				
	//Performing AJAX Get Request
	__performRequest: function( url , callbackMethod , errorMethod ) {
		
		if ( this._xhr != null ) {
			this._xhr.cancel();
		}
		
		this._xhr =  dojo.xhrGet( { // 
			// The following URL must match that used to test the server.
			url: url, 			
			
			handleAs: "xml",
	
			timeout: this._timeout, // Time in milliseconds
	
			// The LOAD function will be called on a successful response.
			load: callbackMethod,
	
			// The ERROR function will be called in an error case.
			error: errorMethod 
		});			
					
	},

	//Performing AJAX Put Request 
	__performPutRequest: function ( url , data , callbackMethod , errorMethod ) {
		
		return dojo.rawXhrPut( { // 
			// The following URL must match that used to test the server.
			url: url, 
						
			handleAs: "xml",
			putData : data ,
	
			timeout: this._timeout, // Time in milliseconds
	
			// The LOAD function will be called on a successful response.
			load: callbackMethod,
	
			// The ERROR function will be called in an error case.
			error: errorMethod 
		});
	},

bgTermFinderWidget.war에 들어 있는 BGRestClient.js 파일을 확인하여 JavaScript REST 클라이언트의 구현을 확인한다.

XSLProcessor 모듈

XSLProcessor는 크로스 브라우저 랩퍼로서 역할을 담당하여 API로부터 수신된 XML 자원을 HTML 단편으로 변환한다.

기본 XSLProcessor 변환 함수는 XML을 처리하기 위해 브라우저의 XSL 변환 엔진을 사용한다.


목록 9. XSLProcessor 코드 스니펫
				
__transform:function( xml , xsl ,paramsNames,paramsValues) {
	var element = null;
	if (dojo.isIE)
	{
		
		var template = new ActiveXObject("MSXML2.XSLTemplate");
		template.stylesheet =  xsl;			
		
		var processor = template.createProcessor();
		processor.input = xml;
		
		if (paramsNames != null  ) {
		
			for( i = 0 ;i < paramsNames.length ; i++){
				processor.addParameter(paramsNames[i],paramsValues[i]);
			}	
		
		}			
		processor.transform();
		element =  processor.output;
	}
	else if (dojo.isFF || dojo.isChrome)
	{
		xsltProcessor=new XSLTProcessor();
		xsltProcessor.importStylesheet(xsl);

		var i = 0;
		
		if ( paramsNames != null ) {
			for( i = 0 ;i < paramsNames.length ; i++){
				xsltProcessor.setParameter(null,paramsNames[i]»
,paramsValues[i] );
			}			
		}

		//Performing the transformation of a fragment of xml
		element = xsltProcessor.transformToFragment( xml , document)
		
	}	
	
	return element;

}


Internet Explorer XSL 프로세서

Internet Explorer는 Microsoft.XMLDOM.transformNode 메소드를 사용하여 XML 노드와 해당 하위 항목을 지정된 XSL 문서로 처리한다. 해당 메소드는 변환된 노드의 일반 텍스트 버전으로 결과를 리턴한다.


Firefox XSL 프로세서

Firefox는 XSLTProcessor의 인스턴스를 작성하고 XSL 문서를 가져오며 변환을 수행하기 위한 xsltProcessor.transformToFragment 메소드를 사용하여 변환을 수행한다. 리턴된 결과는 DOMNode이다.

XSL

이전에 언급한 대로 이 기사는 독자가 XSLT 개발에 이미 익숙하다고 가정하지만, Business Glossary REST API XML 자원이 다음의 설계된 XML 네임스페이스로 모두 선언되는 것을 참고하기 바란다.
http://www.ibm.com/is/bg/rest

이 네임스페이스는 XSLT를 개발할 때에 고려해야 한다. 예제는 목록 10을 참조한다.


목록 10. REST API 네임스페이스
				
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:rest="http://www.ibm.com/is/bg/rest" >
			

목록 11은 선언된 rest 접두부를 사용하는 방법의 예제를 보여준다.


목록 11. 선언된 "rest" 접두부 사용하기

<div class="description">
<xsl:value-of select="rest:termResource/rest:term/rest:shortDescription"/>
</div>

위젯이 사용한 모든 XSL 파일은 js/bg/resources/xsl 디렉토리에서 bgTermFinderWidget.war 파일에 들어있다.


배치

다음 단계를 사용하여 위젯을 배치한다.

  1. 다운로드 섹션으로 이동하여 bgTermFinderWidget.war 파일을 저장한다.
  2. WebSphere Application Server Web Administrative Console을 사용하여 WAR 파일을 배치한다. 반드시 Business Glossary REST API가 있는 동일한 호스트 또는 서브도메인 호스트에 배치해야 한다. 이러한 배치 요구사항은 모든 주요 브라우저에서 구현되는 동일한 원본 정책에 기인한 것이다. 해당 정책은 다른 원본이 있는 또 다른 사이트로 AJAX 호출을 수행하기 위해 하나의 사이트 원본으로부터 로드되는 스크립트를 방지한다.
  3. 배치된 WAR로 이동하고 Main.html 파일에서 RestAPIHost 속성을 수정하여 호스트의 이름과 일치시킨다.
  4. 위젯으로 작업하려면 브라우저를 열고 다음으로 이동한다.
    http://<host>:<port>/bgTermFinderWidget

    위젯은 다음 브라우저를 지원한다.

    • Internet Explorer 버전 6, 7 및 8
    • Firefox 버전 2 및 3
    • Google Chrome

통합

다음은 써드파티 환경에 통합된 BGTerm Finder 위젯의 예제이다.


그림 10. Lotus Mashup 통합
BGTerm Finder 위젯을 포함하는 Lotus Mashup 환경의 스크린샷.

위에 표시된 대로 샘플 위젯을 Lotus Mashup 프레임워크에서 또 다른 위젯으로 연결하기 위해 iWidget 표준을 사용할 수 있다.


그림 11. iGoogle
BGTerm Finder 위젯을 포함하는 iGoogle 페이지의 스크린샷.

그림 12. Netvibes
BGTerm Finder 위젯을 포함하는 Netvibes 페이지의 스크린샷.

결론

IBM InfoSphere Business Glossary 8.1.1 REST API는 독자의 자체적인 사용자 정의 애플리케이션을 통해 사용자에게 용어집 내용을 노출하는 전례 없는 기능을 제공한다. 이 기사에서 제시된 예제들이 독자와 독자의 조직에서 REST API를 통한 InfoSphere Business Glossary의 성능을 활용하기 시작하는 데 사용할 수 있기를 바란다.


감사의 인사

저자는 이 기사에 대한 피드백과 검토를 해준 Ilan Prager, Joshua Fox 및 Erel Sharf에 감사의 말을 전한다.



다운로드 하십시오

설명이름크기다운로드 방식
BGTermFinderWidget code samplebgTermFinderWidget.war9.73MBHTTP
Instructions for deploying BGTermFinderWidgetbgTermFinderWidget-deployment.doc1.33MBHTTP

다운로드 방식에 대한 정보


참고자료

  • IBM InfoSphere Business Glossary를 설치하고 설치 옵션으로 해당 문서를 포함하여 IBM InfoSphere Business Glossary REST API 참조 문서를 얻자. 해당 문서는 InfoSphere Business Glossary > Developing and extending applications 섹션 아래 설치된 IBM InfoSphere Information Server Information Center의 서브세트이다. 자세한 InfoSphere Business Glossary 정보는 온라인 IBM InfoSphere Business Glossary Information Center에서 확인할 수 있다.

  • W3Schools은 JavaScript, CSS, HTML, DOM, XML 및 기타 등등의 많은 웹 기술에 대한 온라인 참조 정보를 제공한다.

  • 웹 기술에 대한 더 심화된 정보는 developerWorks 웹 개발 영역developerWorks XML 영역을 참조한다.

  • Dojo JavaScript 툴킷에 대한 자세한 정보는 Dojo toolkit 문서 페이지를 참조한다.

필자소개

Gabi Nativ는 IBM Israel Software 랩의 IBM InfoSphere Business Glossary 팀에서 재직하는 소프트웨어 개발자이다. Gabi는 Hebrew University of Jerusalem에서 전산학 학사 학위를 받았고 소프트웨어 개발의 분야에서 5년 이상의 경력이 있다. 그는 2년 이상 웹 애플리케이션 개발에 참여해 왔다. 그의 주된 관심사는 Java 및 Web 2.0 기술이다.

Michael Fankhauser는 IBM Israel Software 랩에서 Business Glossary 기능의 사용자 경험 아키텍트이다. Michael은 2006년에 Unicorn Solutions이 합병되면서 IBM에 합류했다. 그는 University of Wisconsin-Madison에서 심리학 학사 학위가 있다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=Information Management, 웹 개발
ArticleID=715325
ArticleTitle=InfoSphere Business Glossary REST API를 사용하여 Web 2.0 애플리케이션 개발하기
publish-date=01202011
author1-email=gabin@il.ibm.com
author1-email-cc=
author2-email=michaelf@il.ibm.com
author2-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.