Разработка программ с использованием Microsoft English Query:
Снабдите возможностями естественного языка запросов ваши веб-узлы и приложения


Информация, содержащаяся в этом документе, представляет текущую точку зрения корпорации Microsoft на обсуждаемые вопросы на момент публикации. Поскольку Microsoft должна реагировать на изменяющиеся условия на рынке, документ не следует рассматривать как обязательство со стороны Microsoft; корпорация Microsoft не может гарантировать, что вся представленная информация сохранит точность после даты публикации. Настоящий документ предназначен только для информационных целей. MICROSOFT НЕ ДАЕТ В ЭТОМ ДОКУМЕНТЕ НИКАКИХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ.

Ó 1998 Microsoft Corporation. Все права защищены. Microsoft, ActiveX и SQL Server NT представляют собой зарегистрированные товарные знаки или товарные знаки корпорации Microsoft, используемые в США и/или других странах. Другие упоминаемые здесь названия продуктов или компаний могут представлять собой товарные знаки соответствующих владельцев.

 

Microsoft Part Number: 098-80839


Оглавление

Введение................................................................................................................................................................... 1

Что можно создать на основе English Query............................................................................................... 2

Создание домена English Query....................................................................................................................... 3

Создание сущностей...................................................................................................................................... 4

Создание связей............................................................................................................................................... 5

Тестирование модели.................................................................................................................................... 6

Построение и развертывание...................................................................................................................... 8

Встраивание English Query в ваш веб-узел................................................................................................. 9

Легкий путь....................................................................................................................................................... 9

Встраивание в ваше собственное приложение, использующее  ASP............................................... 9

Выводы................................................................................................................................................................... 12

Способы получения........................................................................................................................................... 13

 


Введение

Итак, вы изучили технологию Active Server Pages и хотите построить динамический веб-узел или приложение. Вы пошли дальше, разобрались с Microsoft® ActiveX® Data Objects и научились получать содержимое веб-страниц из Microsoft SQL Server или другого сервера баз данных. После того как вы интегрируете свой веб-узел с базой данных, вы, вероятно, захотите предоставить пользователям какие-то способы поиска информации в ней и построения отчетов с ее помощью. Конечно, не составляет труда добавить формы для запуска запросов, с помощью которых пользователь мог бы искать по одному или двум полям. Гораздо тяжелее создавать веб-страницы с формами для поиска во множестве таблиц и полей. Такая более гибкая форма поиска не только труднее в реализации (за ней стоит много проблем, кроме разработки интерфейса пользователя и программирования для веб, включая определение того, как различные таблицы и поля связаны друг с другом), но, кроме того, даже самый лучший интерфейс может оказаться слишком трудным для случайных посетители вашего узла.

Обязательно придется тратить время и усилия на то, чтобы научиться обращаться со сложными инструментами для поиска структурированных данных, которые вы хотели бы предоставить. Это препятствие непреодолимо для случайных пользователей вашего веб-узла, чье внимание вы хотели бы привлечь и удержать. К счастью, существует мощный и гибкий механизм описания поиска, который, по всей вероятности, понимают все ваши пользователи. Это английский язык.

С тех пор как в составе SQL Server 6.5, Enterprise Edition появилась Microsoft English Query version 1.0, это перестало быть научной фантастикой. English Query позволяет вам дать пользователям ваших баз данных и приложений возможность задавать вопросы о ваших данных на обычном английском языке. Добавить начальные средства поиска с запросами на естественном языке очень легко, это потребует лишь малой доли тех усилий, которые ушли на создание всего остального.

Процесс разработки проходит на более высоком уровне, чем обычное программирование, и с ним могут справиться непрограммисты, имеющие некоторый опыт работы с базами данных (например, администраторы баз данных и разработчики содержания веб, которые часто пользуются ими). English Query поставляется с механизмом (сервером COM), который во время выполнения запроса преобразует вопрос, заданный пользователем на английском языке, в оператор SQL. Мы даже поставляем заготовки активных страниц ASP, которые вы можете встроить в свой веб-узел. Такие страницы приводят в движение все остальное: предлагают пользователю задать вопрос по-английски, выполняют получившиеся запросы на SQL и представляют результаты пользователю. В этой статье мы познакомим вас подробнее с тем, как создавать домены English Query и как встраивать сервер COM и готовый домен в ваш веб-узел.

Что можно создать на основе English Query

English Query можно встроить в любое приложение, поддерживающее COM. Ее часто применяют в составе веб-узлов, в которых используются сценарии ASP. На иллюстрации вы видите веб-страницу, использующую заготовку сценария ASP, поставляемую с English Query. В данном случае пользователь или задает вопрос сам, или, нажав кнопку Sample Questions, выбирает вопрос из предлагаемого списка (список составлен с учетом того, какая имеется информация). При нажатии ENTER вопрос передается механизму English Query (серверу COM), который вырабатывает оператор SQL. Последний передается в SQL Server с помощью Active Data Objects (ADO). Возвращаемое множество записей отображается в нижнем поле окна. Давайте рассмотрим подробнее, как создается такое приложение.

Создание домена English Query

Первый шаг в построении приложения  English Query – моделирование семантики вашей предметной области. Вам надо описать как сущности английского языка, то есть существительные, и связи, то есть глаголы, прилагательные, черты (traits) и подмножества – отображаются на таблицы, поля и реляционные соединения вашей базы данных. Для этого есть инструментальная среда (authoring tool), которая после установки системы запускается из группы программ Microsoft English Query. Из меню File выберите New Application и затем Structure loaded from database. В этом случае описание базы данных будет построено по ее схеме: на странице с закладкой Database появится структура таблиц и полей. На следующей иллюстрации показана структура для демонстрационной базы данных SQL Server, называемой pubs (публикации).

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

Если таблицы будут связываться друг с другом в запросах, необходимо сразу указать возможные реляционные соединения. Обычно связи определяются по данным об использовании в таблицах ключей других таблиц (forein keys). C помощью этих данных поддерживается целостность ссылок (referential integrity),  но если их нет, возможные реляционные соединения придется задать вручную.


Создание сущностей

Теперь все готово для определения семантических сущностей. Чтобы определить новую сущность, надо щелкнуть правой кнопкой мыши на ответвлении Entities в закладке Semantics. Введите несколько слов, описывающих сущность, например, author, writer (автор, писатель). Первичное имя сущности должно идти первым. Ниже задайте тип сущности: person, place или time (человек, место или время). Далее укажите, где в базе данных (в какой таблице или в каком поле) эта сущность представлена. Главные (major) сущности обычно соответствуют целым таблицам. Если это главная сущность, укажите, какие поля надо использовать для ее представления пользователю. В случае человека это может быть его имя и фамилия, в случае компании – ее название и адрес. Ниже приведен пример для сущности  author в базе данных pubs.

С главными сущностями связаны два вида второстепенных (minor) сущностей: это names (имена) и traits (черты). Имена показывают, как сущность обозначается в вопросах и утверждениях. Если нажать Autoname , то для сущности author будет создана сущность, представляющая имя сущности author, представленное значениями полей, содержащих имя и фамилию. Такие именующие сущности придется создать для всех главных сущностей, представленных целыми таблицами. Это даст пользователю возможность называть эти сущности в своих вопросах.


Если нажать Autotrait, то будут созданы черты сущности, то есть второстепенные сущности, принадлежащие главной. Если нажать Accept All, то второстепенные сущности будут созданы для всех семантически значимых полей, а между ними и главной сущностью будет установлено отношение trait (быть чертой).

Затем надо создать сущности (вместе с их именами и чертами) для всех главных «существительных», о которые могут спрашивать пользователи. Для базы данных pubs таковыми будут books (книги) и publishers (издатели).

Создание связей

После того как заданы черты главных сущностей, в модели появляется большое количество связей. Уже можно задавать вопросы об объектах, имеющих те или иные черты. Например, “What authors have city Seattle” (покажет авторов и их города), “what book has the title The Busy Executive's Database Guide”, “What publishers have country France?”

Но чтобы задавать по-настоящему интересные вопросы о содержании вашей базы данных, надо указать связи между главными сущностями -- сообщить системе, что “authors write books” (авторы пишут книги) и “publishers publish books” (издатели публикуют книги).  Щелкнув правой кнопкой на ответвлении relationships и затем на Insert Relationship  можно получить окно для определения связи. Нажмите Add Entity и выберите из раскрывающихся меню все сущности, участвующие в связи. Если связь реализуется где-то и когда-то, добавление сущностей времени или места поможет English Query отвечать на некоторые типы вопросов. Сущности, участвующие в связи “authors write books”, показаны на следующей иллюстрации.


Затем вы вводите фразеологические обороты для этой связи. Они могут строиться вокруг глаголов (“authors write books”), предлогов (“publishers are in cities” – «издатели находятся в городах»),  прилагательных (“books are popular” – «книги популярны»), или подмножеств (“some books are bestsellers” – «некоторые книги являются бестселлерами»). Большинство оборотов на основе черт (“book have royalties” -- «за книги платятся гонорары») и имен (“author names are the names of authors”) создаются с помощью Autotrait и Autoname, как было показано выше. Следующая иллюстрация показывает, как определяется глагольный оборот “authors write books.”

Если отношение реализуется где-то и когда-то, имеет смысл предусмотреть некоторые вопросы пользователей и определить сущности времени или места на странице с закладкой Time/Location. В данном случае следует добавить PUBDATE — сущность, характеризующую момент реализации отношения.

Следует создать отношения для любого вида вопросов, который вы хотите дать возможность пользователю задавать. Например, если вы хотите, чтобы модель поддерживала вопросы типа: «в каком городе находится автор», надо вернуться к отношению “authors have cities” и добавить новый предложный оборот “authors are in cities”.

Подробнее о создании домена можно прочесть в разделе “Creating an Application” руководства Microsoft English Query Developer’s Guide (представленного соответствующим значком в группе Microsoft English Query).

Тестирование модели

 В любой момент в процессе разработки вы можете проверить, что у вас получилось, вызвав Test Application из меню Tools.

Например, в данный момент, пока введено только отношение “authors write books”, English Query должна быть способна отвечать на вопросы типа “Who wrote the most books” (кто написал больше всего книг), “who wrote ‘Sushi, Anyone’” (кто написал 'Sushi, Anyone’), “what books did Anne Ringer write” (какие книги написала Энн Рингер). На следующей иллюстрации показано окно диалога Test Application. Введите запрос в форме английского предложения и нажмите Submit. Под ним появится текст на SQL, а если при этом выбрано Execute SQL, то запрос будет выполнен SQL Server и еще ниже появится ответ. Если вы считаете, что этот вопрос может пригодиться в качестве примера или для дальнейшего тестирования, нажмите Add to Question File.


Другой пункт в меню Tools, называемый Regression Test, запускает выполнение всех вопросов, накопившихся в Question File, и сравнивает ответы с теми, которые записаны в файле образцов (он обычно создается, когда вы проводите регрессионное тестирование в первый раз). Это хороший способ убедиться, что вы не испортили свою модель, усложняя ее со временем. Вопросы из Question File можно использовать и на веб-странице, чтобы показать пользователю на примерах, какую информацию он может получить.

Построение и развертывание

После того как модель разработана и протестирована в инструментальной среде English Query, можно построить приложение. Пункт Build Application (в меню Tools) запускает создание описания домена English Query — файла с расширением (.EQD). Файл .EQD и механизм English Query (сервер COM “MSEQ.Session”) могут быть развернуты внутри любого приложения, поддерживающего COM.

Встраивание English Query в ваш веб-узел

Легкий путь

В каталоге SAMPLES/ASP2, вложенном в каталог Microsoft English Query, имеется пример реализации. Если у вас работает Microsoft Internet Information Server (IIS) версии 4.0, и вы разворачиваете средства доступа с того же компьютера, установить страницу, через которую пользователи смогут задавать вопросы, обращаясь к вашему домену English Query, можно, запустив файл SETUPASP.VBS.  Это сценарий Windows Scripting Host (WSH), который копирует файлы ASP и созданный вами файл .EQD в каталог на веб-сервере, создает виртуальный каталог IIS для страниц English Query и устанавливает параметры в файле под названием PARAMS.INC, с помощью которых сценарии ASP узнают, где находится база данных. Если у вас работает IIS 3.0, вам придется проделать все это вручную (перечисленные выше шаги описаны в файле  README.HTM). После этого можете попробовать просмотреть, например, страницу http://localhost/pubs с помощью вашей программы просмотра ресурсов Интернета. Наконец, вы можете установить ссылки на эту страницу с других страниц вашего узла, включая и другие приложения, использующие ASP.

Встраивание в ваше собственное приложение, использующее  ASP

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

Следующий пример программы (упрощенная версия заготовки программы для ASP) показывает наиболее существенные аспекты того, как запрос пользователя преобразуется в SQL. Программа такого рода должна быть встроена в страницу ASP, которая обрабатывает запрос пользователя.

       ‘ create the English Query object

Set objEQSession = Server.CreateObject("Mseq.Session")

‘ load the domain, e.g. “C:\PUBS\PUBS.EQD”
objEQSession.InitDomain(Application("DomainFile"))

‘ convert user’s question (strQuest) to English Query response object
Set objEQResponse = objEQSession.ParseRequest(strQuest)
’ determine what kind of response object it is
Select Case objEQResponse.Type
Case nlCommandResponse
       Set objCommands = objEQResponse.Commands
       For intCommand = 0 To objCommands.Count - 1
              Set objCommand = objCommands(intCommand)
              Select Case objCommand.CmdID
              Case nlQueryCmd

                     ‘ execute the returned SQL and display to the user       
                     DoSQLCommand objCommand
              Case nlAnswerCmd


‘ just display the answer
       Response.Write objCommand.Answer

              End Select

Next

Case nlUserClarifyResponse
       DoClarification objEQResponse, strQuestion
Case nlErrorResponse
       Response.Write objEQResponse.Description & "<BR>”
End Select

Прежде всего, с помощью Server.CreateObject(“Mseq.Session”) создайте объект English Query. Для загрузки домена вызываете метод InitDomain с именем вашего файла .EQD. Далее, вызываете метод ParseRequest(), передавая ему вопрос пользователя, и получаете объект-ответ. Ответ может представлять собой набор команд, являющихся операторами SQL, или содержать настоящий ответ, который English Query может дать самостоятельно, не соединяясь с базой данных. Операторы SQL надо передать для выполнения SQL Server, а результат вы, вообще говоря, покажете как таблицу на вашей веб-странице. Процесс выполнения оператора SQL с помощью Active Data Objects (ADO) и отображения результатов в виде таблицы встроен в функцию DoSQLCommand (ее можно найти в SAMPLES/ASP/COMMON.INC). Если же получен настоящий ответ, а не команда, то его нужно просто показать пользователю. Ответом может быть “request for clarification” (запрос на пояснение). Например, в ответ на запрос “What are all the Honda Civics in Washington” может последовать просьба пояснить, имеется ли в виду город или штат Washington. Вызов DoClarification (тоже имеющийся в COMMON.INC) содержит в себе код, нужный для того, чтобы попросить пользователя устранить двусмысленности в запросе, предложив выбрать один из возможных вариантов, хранящихся в UserInputs.

Выводы

English Query это мощное средство поиска для вашего веб-узла и прикладных программ, использующих  SQL Server. Системы на ее основе легко реализуются, особенно в составе приложений на базе ASP. Добавление ее к вашему веб-узлу позволяет вам уйти от необходимости программирования большого количества специализированных отчетов и сложных форм запросов.

Способы получения

В прошлом году Microsoft English Query 1.0 поставлялась с Microsoft SQL Server 6.5 Enterprise Edition. Кроме того, она поставляется с версией Beta 2 SQL Server 7.0. Подробнее о том, как купить SQL 6.5 или принять участие в бета-тестировании SQL 7.0, можно узнать на http://www.microsoft.com/sql.