Разработка приложений Web 2.0 с использованием интерфейса InfoSphere Business Glossary REST API

Продукт IBM InfoSphere Business Glossary позволяет пользователям создавать, поддерживать и совместно использовать корпоративные словари и системы классификации. В версии Business Glossary 8.1.1 реализован интерфейс REST API, который упрощает использование контента словаря – благодаря предоставлению возможностей для разработки специальных предложений, удовлетворяющих конкретные потребности.

Данная статья предлагает пошаговые инструкции по разработке переносимого динамического виджета с поддержкой чтения/записи, в котором интерфейс IBM InfoSphere Business Glossary REST API используется в сочетании с различными технологиями Web 2.0. Этот виджет позволяет пользователям находить термины, изучать их детали и осуществлять базовое редактирование.

Цель данной статьи состоит в том, чтобы знания, полученные пользователями продукта InfoSphere Business Glossary при построении этого учебного виджета, побудили их к использованию интерфейса REST API при создании своих собственных приложений. Эта статья ориентирована на инженеров по программному обеспечению, знакомых с технологиями Web 2.0, и на проектировщиков программных продуктов, способных применить предоставленные здесь инструменты в реальных ситуациях.

Габи Нэйтив, разработчик программного обеспечения, IBM

Габи Нэйтив (Gabi Nativ) – разработчик программного обеспечения в группе IBM InfoSphere Business Glossary лаборатории IBM Israel Software Lab. Г. Нэйтив имеет ученую степень бакалавра в области вычислительной техники, полученную в Еврейском университете (Hebrew University) в Иерусалиме, и работает в области создания программного обеспечения уже более пяти лет. Он занимается разработкой Web-приложений более двух лет. Основными областями его интереса являются технологии Java и Web 2.0.



Майкл Фанкхаузер, архитектор по функциональным возможностям, IBM

Майкл Фанкхаузер (Michael Fankhauser) – архитектор по функциональности продукта Business Glossary в лаборатории IBM Israel Software Lab. М. Фанкхаузер стал сотрудником корпорации IBM после того, как она приобрела компанию Unicorn Solutions в 2006 г. Он является обладателем ученой степени бакалавра по психологии, полученной в университете штата Висконсин в Мэдисоне (США).



01.04.2010

Предварительные условия

Данная статья рассчитана на разработчиков, обладающих базовым пониманием технологий Web-программирования (HTML, JavaScript, Ajax, XML, XSLT) и опытом разработки виджетов с помощью JavaScript-инструментария Dojo. Для развертывания описываемого виджета вам потребуются базовые навыки администрирования, а также полномочия, необходимые для развертывания WAR-файлов Web-приложения в среде IBM WebSphere Application Server. Интерфейс Business Glossary REST API является поддерживаемой частью продукта IBM InfoSphere. Остальные компоненты для «стороны клиента», разрабатываемые в процессе выполнения описываемых в этой статье шагов, основаны на общепринятых технологиях Web-программирования, однако официально они не поддерживаются в рамках какого-либо продукта IBM.

Обзор

Продукт IBM InfoSphere Business Glossary позволяет пользователям создавать, поддерживать и совместно использовать корпоративные словари и системы классификации. Business Glossary предоставляет свои богатые функциональные возможности через API-интерфейс, который использует сервисы на базе технологии REST (Representational State Transfer). REST – это открытый архитектурный стиль для проектирования Web-сервисов, который позволяет разработчикам с базовым пониманием технологий Web 2.0 быстро собирать приложения.

Данная статья содержит пошаговые инструкции по созданию REST-компонента, который затем может быть встроен в любую Web-страницу. Этот компонент представляет собой виджет под названием BGTerm Finder. Это нетребовательный к ресурсам инструмент, который обеспечивает возможности для быстрого открытия и модификации бизнес-словаря компании.

Ниже представлены два типовых бизнес-сценария, иллюстрирующих возможные варианты использования описываемого компонента.

  • Некий специалист по предметной области просматривает бизнес-словарь своей компании и с удивлением обнаруживает, что определение термина Actual Net Present Value не вполне корректно. Он немедленно использует виджет BGTerm Finder для того, чтобы найти этот термин, а затем отредактировать его в режиме реального времени с целью исправления указанного определения.
  • Некий менеджер по продажам читает аналитический отчет и обращает внимание на термин Actual Net Present Value. У него возникает желание понять, каким образом данный термин определен в словаре его компании. Он использует виджет BGTerm Finder, чтобы отыскать этот термин, а затем изучить его контекст и его определение.

На рисунке 1 показаны два снимка экрана виджета BGTerm Finder. На первом снимке показано, что пользователь искал строку «act» и раскрыл подробное представление для термина Actual Net Present Value. На втором снимке показано, что пользователь нажал на пиктограмму для редактирования данного термина.

Рисунок 1. Виджет BGTermFinder Widget – снимки экрана
Рисунок 1. Виджет BGTermFinder Widget – снимки экрана

Интерфейс REST API

Интерфейс Business Glossary REST API позволяет приложениям-клиентам получать и изменять (создавать) контент бизнес-словаря. Технология REST была выбрана в качестве API-интерфейса вследствие нескольких своих преимуществ относительно других распространенных технологий. К числу самых важных преимуществ относятся низкое потребление вычислительных мощностей и способность к взаимодействию.

Этот интерфейс представляет контент словаря в виде ресурсов. Обращение к этим ресурсам осуществляется по их URI-идентификаторам, а сами ресурсы представлены посредством XML-документов, которые, в свою очередь, определены размещенными на сервере XML-схемами.

Ресурсы API

Ресурсы, которые могут быть получены посредством интерфейса Business Glossary REST API, разделены на следующие два основных набора.

  • Entity Resource Set – этот набор ресурсов содержит подробную информацию о таких элементах бизнес-словаря, как категории, термины, стюарды, специальные атрибуты и дополнительные активы. Все эти элементы поддерживаются интерфейсом Read API. Такие элементы, как категории, термины и специальные атрибуты, также поддерживаются интерфейсом Write API, включая возможности по созданию, обновлению и удалению. Более подробная информация приведена в документации по интерфейсу REST API.
  • Operational Resource Set – этот набор ресурсов предоставляет удобные типовые операции для разработки приложений-клиентов, в том числе следующие.
    • Autocomplete (автозаполнение). Поступающие из словаря предложения по заполнению с учетом префикса (групповые символы поддерживаются).
    • Anywhere Search (поиск из любого приложения). Алгоритм поиска, аналогичный используемому в продукте IBM InfoSphere Business Glossary Anywhere (групповые символы не поддерживаются).
    • Search (поиск). Эта операция обеспечивает поиск в словаре по заданному шаблону. Пользователь имеет возможности для управления отыскиваемыми опциями и классами, а также ранжированием результатов (групповые символы поддерживаются).

Транзакции API

Транзакции API-интерфейса состоят из HTTP-запросов и HTTP-ответов. Для разных операций в HTTP-запросе требуются разные методы. Комбинация URI-идентификатора и HTTP-метода определяет, какая именно операция будет выполнена. Интерфейс REST предоставляет следующие HTTP-методы:

  • POST — создать ресурс
  • GET — прочитать ресурс
  • PUT — обновить ресурс
  • DELETE — удалить ресурс

Схема виджета

Типовой виджет BGTerm Finder соответствует архитектурному шаблону для Web-приложений под названием MVC (Model-View-Controller) или «Модель-Представление-Контроллер». Далее в статье кратко описывается все компоненты указанного шаблона и связанные с ними технологии.

  • Модель (XML) – «вполне определенные» XML-ресурсы API-интерфейса, представляющие собой модели данных.
  • Представление (HTML+CSS) – HTML-код виджета отвечает за структуру; CSS-код виджета отвечает за стили.
  • Контроллер (JavaScript) – JavaScript-код виджета, выполняющий следующие действия.
    • Обрабатывает пользовательские события
    • Передает ресурсы к интерфейсу REST API и от него с использованием AJAX
    • Преобразует XML-ресурсы в HTML-фрагменты, используя для этого XSL-преобразование
    • Вставляет указанные фрагменты в DOM
    • Манипулирует пользовательским интерфейсом
Рисунок 2. Схема виджета
Рисунок 2. Схема виджета

Модель (XML)

Модели виджетов – это XML-ресурсы, возвращаемые интерфейсом REST API. Эти ресурсы представляют собой XML-документы, определенные размещенными на сервере XML-схемами и интерфейсом REST API. В описываемом виджете используются модели searchResource и termResource.

Листинг 1. XML-модель searchResource
<?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-модель termResource
 <?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>

Представление (HTML+CSS)

XML-модели, описанные в предыдущем параграфе, преобразуются в HTML-фрагменты, которые затем вставляются в DOM виджета.

Мы разрабатываем виджет, который может быть встроен в любую Web-страницу, поэтому хотим сохранить ресурсы браузера и избежать конфликтов с контентом документа. Ниже описывается вариант решения этой задачи в коде HTML и CSS.

  • Для упрощения встраивания фрагментов используются не идентификаторы, а точки и события Dojo
  • Используются уникальные имена CSS-классов с конкретным префиксом
  • Для сведения к минимуму объема HTML-кода используется JavaScript-инструментарий Dojo.
Листинг 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

SearchResults – это главный div-блок в структуре HTML-виджета, отвечающий за отображение терминов в ответ на информацию, вводимую пользователем с помощью клавиатуры.

Получение результатов осуществляется в формате XML-модели SearchResult, после чего эти результаты преобразуются в HTML-фрагменты и прикрепляются к div-блоку SearchResults.

HTML-фрагменты результатов поиска представляют собой все теги, которые однозначно идентифицированы одним и тем же идентификатором Repository ID (RID), используемым в словаре Business Glossary. Контроллер использует этот RID-идентификатор для получения всего ресурса по термину при поступлении соответствующего запроса пользователя. Кроме того, используется дополнительный специальный HTML-атрибут, идентифицирующий т.н. «стюарда» ресурса.

Листинг 4. HTML-код Search Results
<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 (Закрыт)– отображается только название термина
Рисунок 6. Closed (Закрыт)– отображается только название термина
Рисунок 7. Open for viewing (Открыт для просмотра)– отображаются детали термина, а также пиктограмма редактирования
Рисунок 7. Open for viewing (Открыт для просмотра)– отображаются детали термина, а также пиктограмма редактирования
Рисунок 8. Open for editing (Открыт для редактирования)– отображаются детали термина, а также стюард в режиме редактирования с инструментами редактирования
Рисунок 8. Open for editing (Открыт для редактирования)– отображаются детали термина, а также стюард в режиме редактирования с инструментами редактирования

Контроллер (код виджета на JavaScript)

Центральная часть виджета – это его контроллер. Контроллер состоит из JavaScript-кода, который реагирует на действия пользователя посредством вызова интерфейса REST API. После этого посредством DOM-манипулирования контроллер вставляет преобразованные HTML-фрагменты в шаблон виджета.

DOM-манипулирование и «пузырьковая» технология

С целью понимания логики DOM-манипулирования, осуществляемого контроллером, в этом разделе подробно описывается сценарий Open Node (Открытие узла). Сценарий Edit Node (Редактирование узла) основан на аналогичной логике.

Рисунок 9. Последовательность действий – открытие узла
Рисунок 9. Последовательность действий – открытие узла

Когда пользователь нажимает курсором на закрытый узел, браузер передает произошедшее на целевом узле событие onClick к главному onClick-обработчику в коде контроллера виджета. Главный обработчик использует RID для идентификации этого целевого узла, после чего вызывает соответствующий метод обработки.

Такая «пузырьковая» техника передачи событий позволяет отделить структуру представления виджета от кода его контроллера. Кроме того, эта технология следует принципу единственного выбора, согласно которому вся обработка событий onClick сконцентрирована в одном месте.

Листинг 5. Функция Click handler
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 метод обратного вызова контроллера сначала генерирует HTML-фрагмент с помощью модуля XSLProcessor, а затем вставляет этот фрагмент в целевой узел.

Листинг 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-клиента

Описываемый виджет использует JavaScript-класс инструментария Dojo (BGRestClient) для выполнения асинхронных REST-вызовов нужных ресурсов.

В Листинге 8 показаны две основных вспомогательных функции (helper), которые выполняют асинхронные 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 
		});
	},

Файл BGRestClient.js (содержащийся в архиве bgTermFinderWidget.war), представляет собой реализацию REST-клиента на JavaScript.

Модуль XSLProcessor

Модуль XSLProcessor действует как браузеронезависимый упаковщик для преобразования XML-ресурсов, полученных от API-интерфейса, в 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;

}
XSL-процессор браузера Internet Explorer

Браузер Internet Explorer использует метод Microsoft.XMLDOM.transformNode для обработки XML-узла и его потомков с указанным XSL-документом. Этот метод возвращает результат как версию преобразованного узла в простом текстовом формате.

XSL-процессор браузера Firefox

Браузер Firefox выполняет преобразование посредством создания экземпляра процессора XSLTProcessor, для чего импортирует XSL-документ и применяет метод xsltProcessor.transformToFragment для выполнения указанного преобразования. Результат возвращается в виде DOMNode.

XSL

Как указывалось выше, в данной статье предполагается, что читатели уже знакомы с технологией разработки XSLT. Тем не менее, обратите внимание, что все XML-ресурсы интерфейса Business Glossary REST API декларируются со следующим назначенным пространством 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-файлы содержатся в файле bgTermFinderWidget.war, который, в свою очередь, находится в каталоге js/bg/resources/xsl.


Развертывание

Для развертывания описываемого виджета выполните следующие шаги.

  1. Перейдите в раздел Download и сохраните файл bgTermFinderWidget.war.
  2. Для развертывания WAR-файла воспользуйтесь Web-консолью администратора продукта WebSphere Application Server. Развертывание должно быть осуществлено на том же хосте, на котором функционирует ваш интерфейс Business Glossary REST API или на субдоменном хосте. Это требование к развертыванию обусловлено политикой Same Origin Policy (политика единого происхождения), которую реализуют все ведущие браузеры. Эта политика предотвращает загрузку скрипта из какого-либо сайта с определенным происхождением для выполнения AJAX-вызовов к другому сайту с иным происхождением.
  3. Перейдите в развернутый WAR-файл и измените атрибут RestAPIHost в файле Main.html в соответствии с именем своего хоста.
  4. Для работы с виджетом откройте браузер и перейдите по следующему адресу:
    http://<host>:<port>/bgTermFinderWidget

    Описываемый виджет поддерживает следующие браузеры:

    • Internet Explorer, версии 6, 7 и 8
    • Firefox, версии 2 и 3
    • Google Chrome

Интеграция

Ниже показаны примеры интеграции виджета BGTerm Finder в среды других продуктов.

Рисунок 10. Интеграция с Lotus Mashup
Рисунок 10. Интеграция с Lotus Mashup

Как показано выше, мы можем использовать стандарт iWidget для подключения нашего «тренировочного» виджета к другому виджету в рамках фреймворка Lotus Mashup.

Рисунок 11. Интеграция с iGoogle
Рисунок 11. Интеграция с iGoogle
Рисунок 12. Интеграция с Netvibes
Рисунок 12. Интеграция с Netvibes

Заключение

Интерфейс REST API продукта IBM InfoSphere Business Glossary 8.1.1 обеспечивает широкие возможности для представления пользователям доступа к контенту бизнес-словаря посредством ваших собственных приложений. Мы надеемся, что показанные в этой статье примеры помогут вам и вашей организации приступить к реализации всей мощи продукта InfoSphere Business Glossary с помощью интерфейса REST API.


Благодарности

Авторы выражают благодарность за рецензирование данной статьи и полезные отзывы по ней следующим лицам: Ilan Prager, Joshua Fox и Erel Sharf.


Загрузка

ОписаниеИмяРазмер
BGTermFinderWidget code samplebgTermFinderWidget.war9.73Mб

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=479631
ArticleTitle=Разработка приложений Web 2.0 с использованием интерфейса InfoSphere Business Glossary REST API
publish-date=04012010