IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  XML | Open source | Технология Java | Information Management | SOA и Web-сервисы  >

Основы создания mashup -- Web-сервисы и семантический Web : Часть 6. Дайте пользователю возможность управления

Применение семантических методик позволяет дать пользователям mashup-приложений возможность управлять сервисами, информацией и ее представлением

developerWorks
На предыдущую страницуСтраница 5 из 11 На предыдущую страницу

Опции документа

Обсудить

Исходные тексты примера


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Получение данных

Весь этот массив программного кода окончательной формы использует метод POST вместо GET, который возвращает данные в метод doPost(), где фактически производится вся обработка.

Получение основных параметров

Первый шаг состоит в получении основных параметров - тех, которые представляют собой обычный, легко извлекаемый текст (см. листинг 21).


Листинг 21. Получение основных параметров
                    
...
public class MashupClientServlet 
             extends javax.servlet.http.HttpServlet 
             implements javax.servlet.Servlet {

...
   protected void doPost(HttpServletRequest request, 
                         HttpServletResponse response) 
                     throws ServletException, IOException {

      MashupOntologyReader ont = new MashupOntologyReader();
      
      String query = request.getParameter("query").toString();
      String serviceURI = 
             request.getParameter("serviceURI").toString();
      Service service = ont.obtainServiceInfo(serviceURI);
      
      String template = request.getParameter("template")
                            .replaceAll("<", "<")
                            .replaceAll("'", "'")
                            .replaceAll(""", "\"");
      System.out.println("Template = "+template);
      
      String serviceType = 
           request.getParameter("serviceType").toString();
      System.out.println("serviceType = "+serviceType);
     
      try {
         DocumentBuilder builder = DocumentBuilderFactory
                     .newInstance().newDocumentBuilder();

...

Надо просто получить значение параметра, а в случае шаблона нам нужно будет обратить изменения, которые мы сделали, отправляя данные через форму.

Отправив форму, мы должны увидеть в консоли следующее (см. листинг 22).


Листинг 22. Основные параметры
                    
Template = <p><a value='href'><value /></a>, 
$<value /></p>
serviceType = http://example.com/store#Bookstore



В начало


Получение входных значений для свойств

Получение входных значений для свойств чуть сложнее, но повторяет ход действий, использованный в предыдущем шаге (см. листинг 23).


Листинг 23. Получение входных значений для свойств
                    
...
      String serviceType = 
                request.getParameter("serviceType").toString();
      System.out.println("serviceType = "+serviceType);
      
      OntClass serviceClass = ont.getOnt().getOntClass(serviceType);
      Property outputProp = (Property)ont.getOnt()
               .getProperty("http://example.com/store#outputType");
      RDFNode outputPropVal =  
                        serviceClass.getPropertyValue(outputProp);
       
      OntClass returnObjectClass = ont.getOnt()
                            .getOntClass(outputPropVal.toString());
      System.out.println("returnObjectClass = "+returnObjectClass);

      Vector properties = ont.getAllProperties(returnObjectClass);

      String[] attributes = new String[20] ;
      String[] elements = new String[20] ;
        
      for (int i = 0; i < properties.size(); i++) {
           String cleanPropName = ((Property)properties.elementAt(i))
                       .getURI().replaceAll("#", "_").toString()
                                .replaceAll("http://", "_");
           try {
              int index = new Integer(request.getParameter(
                  "attribute"+cleanPropName).toString())
                                        .intValue() - 1;
              attributes[index] = ((Property)properties.elementAt(i))
                                        .getURI();
              System.out.println("Attribute = "+attributes[index]);
           } catch (Exception e){
              //Don't do anything, just weed out entries that 
              //aren't integers.
           }
           try {
              int index = new Integer(request.getParameter(
                "element"+cleanPropName).toString()).intValue() - 1;
              elements[index] = 
                   ((Property)properties.elementAt(i)).getURI();
              System.out.println("Element = "+elements[index]);
           } catch (Exception e){
              //Don't do anything, just weed out entries that 
              //aren't integers.
           }
        }

     
       try {
         DocumentBuilder builder = DocumentBuilderFactory
                     .newInstance().newDocumentBuilder();

         Service[] svcs = {service};
         
...

Первая часть должна показаться вам знакомой; теперь мы делаем ее во второй раз, организуя цикл по свойствам. Однако фактическое получение свойств - это отдельная история.

В конечном счете нам нужно знать URI каждого свойства как записи либо в attributeValues либо elementValues Vectors класса Service. Более того, нам нужно добавлять их в том порядке, который выбрал пользователь. Для этого нам нужно пройти в цикле по всем свойствам, и, если пользователь ввел целое число, мы будем использовать его в качестве индекса массива. В этом случае мы получим массив URI свойств, расположенных в том порядке, в котором их ввел пользователь.

Если вы обновите форму, вы должны увидеть в консоли нечто похожее на листинг 24.


Листинг 24. Результат работы
                    
Template = <p><a value='href'><value /></a>, 
$<value /></p>
serviceType = http://example.com/store#Bookstore
returnObjectClass = http://example.com/store#StockItem
Property: Item Price
Property: Item Description
Property: Item Detail Page URL
Property: Stocked Product
this bears further investigation: 
Element = http://example.com/store#itemPrice
Element = http://example.com/store#itemDescription
Attribute = http://example.com/store#itemDetailURL

Обратите внимание, что URI для свойств теперь приняли нормальный вид.



В начало


Добавление данных к сервису

Теперь нам нужно сохранить всю эту информацию в классе Service (см. листинг 25).


Листинг 25. Добавление данных к сервису
                    
...
      String template = request.getParameter("template")
                            .replaceAll("<", "<")
                            .replaceAll("'", "'")
                            .replaceAll(""", "\"");
      service.template = template;
      
      String serviceType = 
                request.getParameter("serviceType").toString();
      
      OntClass serviceClass = ont.getOnt().getOntClass(serviceType);
      Property outputProp = (Property)ont.getOnt()
               .getProperty("http://example.com/store#outputType");
      RDFNode outputPropVal =  
                        serviceClass.getPropertyValue(outputProp);
      service.recordExp = outputPropVal.toString();
       
      OntClass returnObjectClass = ont.getOnt()
                            .getOntClass(outputPropVal.toString());
...
              elements[index] = 
                   ((Property)properties.elementAt(i)).getURI();
           } catch (Exception e){
              //Don't do anything, just weed out entries that 
              //aren't integers.
           }
        }         

        service.attributeValues.clear();
        service.elementValues.clear();
        
        for (int i = 0; i < 20; i++){
           if (attributes[i] != null && !attributes[i].equals("")){
              service.attributeValues.add(attributes[i]);
           }
           if (elements[i] != null && !elements[i].equals("")){
              service.elementValues.add(elements[i]);
           }
       }
      
       try {
         DocumentBuilder builder = DocumentBuilderFactory
                     .newInstance().newDocumentBuilder();

         Service[] svcs = {service}; 
...

Начиная с самого начала, атрибуты шаблона имеют очевидные значения, а recordExp представляет выражение, которое идентифицирует отдельные записи результата, поэтому в этом новом способе оно будет иметь значение URI, представляющего outputType.

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

Поскольку сервлет настроен на получение информации от Service, нам больше ничего не нужно делать, чтобы предоставить данные сервлету.



В начало



На предыдущую страницуСтраница 5 из 11 На предыдущую страницу

    IBM в России Конфиденциальность Контакты