1) http://socialgraph.apis.google.com/lookup? 2) q=http%3A%2F%2Fperso.hirlimann.net%2F%7Eludo%2Fblog%2F& 3) fme=1&edi=1&edo=1&pretty=1&sgn=1&callback=parse
« Семантическая сеть. Часть 3 | FOAM: физика и actionscript 3. Часть 1 » |
Семантическая сеть. Часть 4
Сегодня я продолжу и завершу рассмотрение технологий, составляющих основу Семантической Паутины. В прошлой статье я начал рассказ об одной из наиболее популярных (и уже нашедших практическое применение в ряде веб-приложений) технологий – FOAF. FOAF позволяет нам создавать описания “своего профиля”, указывать то, с какими сайтами или документами вы взаимосвязаны, и (самая “соль” технологии) указывать “дружеские” отношения с другими участниками сети.Однако перед тем как я перейду к рассмотрению программных средств позволяющих находить и визуализировать FOAF-информацию, рассмотрим смежную с FOAF технологию - XFN. XFN расшифровывается как XHTML Friends Network. Из названия следует, что эта технология также служит для описания социальных сетей (являясь неким аналогом FOAF), но в ее основе лежит XHTML. Для создания FOAF-документов мы использовали XML-синтаксис по правилам RDF. Нельзя сказать, что эти технологии (XML, RDF) сложны: написав десяток RDF-документов можно их “клепать” практически не задумываясь (подлежащие, сказуемое, дополнение). Грамматики (список определенных тегов для описания некоторой предметной области) уже достаточно стабильны, чтобы не бояться, будто стандарты пересмотрят и все, сделанное ранее, будет утеряно. Я вижу проблему в двух вещах: отсутствие ярких и работающих приложений, показывающих массовому пользователю силу Semantic Web. Вторая проблема – сложность добавления к традиционному Web-у семантической разметки. Действительно, мы должны фактически создать и поддерживать два параллельных документа: внося изменения в html-документ, вносим их и в RDF-файл – это может быть слишком утомительно. Отсутствие “в одно нажатие мыши” поддержки RDF в средствах веб-разработки (и редакторы html, и движки сайтов, форумов, блог-платформ) отпугивают многих из желающих познакомиться с Semantic Web. Со временем, ситуация должна поменяться, но лучше поговорим о сегодняшнем дне и уже существующих подходах к внедрению семантических данных в html-документы. Здесь нам помогут микроформаты, одним из ярких представителей которых и является XFN. Идея микроформатов носит эволюционный характер и говорит: нам не нужны отдельные RDF-документы, мы не хотим тратить силы на согласование html и RDF-содержимого, давайте лучше “упакуем” семантическую информацию внутрь обычного html-файла. Действительно, когда вы создаете страничку на сайте со своей биографией и перечнем друзей, то размечаете ее с помощью html-тегов, назначаете этим тегам стили CSS (визуальная сторона информации). В первой статье серии я рассказывал про ряд тегов ACRONYM, CITE, ADDRESS, которые могли бы быть использованы для логической разметки информации, но у них не сложилось, в основном из-за незрелости более актуальных на тот момент средств визуализации. Сейчас верстальщики в массе своей уже осознали, что только благодаря четкой структуре информации (логической) и вынесению средств визуализации в отдельный файл CSS, можно ускорить верстку сайтов. Можно снизить издержки на поддержку и доработку сайта, смену дизайна, добавление новых функций так, чтобы не происходило подобного: “ой, мы только добавили в углу страницы баннер, и весь сайт поломался”. Прекрасно, значит, когда я создал блок “div” внутри которого будет храниться мое ФИО, и назначил для этого блока некоторый CSS-класс для красивого оформления я уже подготовил данные для последующей “семантизации”. Что если я добавлю к этому блоку div еще один css-класс, пусть даже без визуального оформления, но с заранее оговоренным именем, например, myfio. Тогда любое веб-приложение “вытянув” страничку сможет определить, что содержимое некоторого абзаца имеет семантическое значение ФИО автора страницы. Именно эта идея легла в основу микроформатов. Гибкость микроформатов в том, что мы не создаем новые теги, например, price, fio, boss, и не ждем тысячу лет, пока они будут реализованы разработчиками браузеров. Так, чтобы попытка вставить в текст страницы ссылку на свое “fio” не привела к “падению” верстки сайта. К счастью в составе стандарта html/xhtml изначально были предусмотрены точки расширения – это атрибуты rel, rev и class. Например, rel – это атрибут для ссылки “a” или “link”. И его назначение - указать на то “какая это ссылка?”. Так, ссылка <a href="http://site.ru" rel="home">home</a> говорит, что для текущей страницы сайта домашней страницей является расположенная по адресу http://site.ru. Если вы откроете этот адрес в firefox с установленным плагином https://addons.mozilla.org/ru/firefox/addon/1324 или в opera, то вы увидите строку меню с перечислением “связанных” страниц. Однако не будем отходить от темы, а вернемся назад к описанию социальной сети с помощью XFN. Публикуя информацию на странице сайта о своих друзьях, сотрудниках, семье вы создаете ссылки на их персональные странички. А давайте к каждой ссылке добавим атрибут rel и перечислим через пробел список ключевых слов, подсказывающий кто это, и как связан с нами. Например, следующий пример говорит, что по адресу http://jim.ru расположена страничка описывающая меня:
<a href="http://jim.ru" rel="me">jim</a>
Ключевое слово | Значение |
friend acquaintance contact | Укажите одно из значений: друг, просто знакомый, человек которого вы знаете, как найти. |
met | С этим человеком вы лично встречались |
co-worker colleague | С этим человеком вы работаете в одной организации и, второй вариант, это ваш коллега. |
co-resident neighbor | А это фактор географического расположения. В первом случае вы живете в одном городе или на одной улице. Во втором случае – вы соседи. |
child parent sibling spouse kin | Семейные отношения: ваш ребенок, ваши родители, брат или сестра, затем супруг и, наконец, просто родственник. |
muse crush date sweetheart | Ваша муза, тот к кому вы испытываете страстное влечение, тот с кем вы встречаетесь и, наконец, ваш возлюбленный или возлюбленная. |
me | Это я. Все остальные значения атрибутов является недопустимыми. |
<a href="lenka.ru" rel="friend colleague met neighbor date ">.
Создать XFN-ссылки очень легко, хотя может кому-то пригодится и online-генератор http://gmpg.org/xfn/creator. Теперь перейдем к вопросу извлечения XFN и FOAF информации с последующей ее обработкой и визуализацией. На просторах сети мне попался занимательный пример отображения FOAF-сведений в виде интерактивного графа http://apassant.net/home/2008/01/foafgear/ (в основе этого приложения лежит написанная на flash и довольно-таки универсальная библиотечка для построения графов graph-gear). Если у вас есть FOAF профиль, распложенный не на одном из “тяжелых сайтов” вроде ЖивогоЖурнала (следующий сервис блокирует ряд сайтов), то вы можете попробовать его ввести в форму http://xml.mfd-consult.dk/foaf/explorer/, затем данные из foaf файла будут визуализированы (пусть не в виде графа, но все равно удобно). Еще может быть интересен проект ljnet (http://patrickbarry.com/projects/ljnet/index.php). Эта программа написана на java, так что для корректной работы потребуется sun jre, также для работы требуется установленный quicktime.
Последняя технология, о которой я должен упомянуть перед переходом к “немного попрограммировать” – это openid. Идея универсального идентификатора для каждого пользователя сети была заманчива всегда, в особенности для предприятий занятых в сфере электронной коммерции и всевозможных спец.служб. Я вспоминаю давнишний скандал с выпуском на рынок процессоров Pentium III с внедренным серийным номером. Представители Intel рассказывали, что уникальные идентификационные номера повысят безопасность, критики заявили о нарушении конституционных свобод, о том, что недобросовестные компании в корыстных целях используют информацию о том, какие сайты посещают пользователи. Периодически на страницы как электронной, так и периодической печати пробиваются всплески “ужаса”, посвященные все новым сферам применения RFID-меток, уже не только для того чтобы “пометить” товары в магазине или поместить чип под кожу животным, но и о том, как эти метки будут (были, уже давно были) внедрены в тело человека. Однако забудем об ужасах Большого Брата и рассмотрим сложившуюся ситуацию в internet. Как известно в internet множество сайтов, форумов, блогов. Для того чтобы активно жить в сети: читать статьи, комментировать, вы должны быть зарегистрированы. А как же иначе? Ведь, если разрешить писать сообщения в свой блог всем подряд, то его элементарно замусорят спамом. “Черные” оптимизаторы бродят по просторам сети и оставляют в первых попавшихся блоках дурацкие комментарии с ссылкой на рекламируемый сайт. Уважаемые горе-оптимизаторы, прочитайте, наконец, google FAQ и запомните, что “a” ссылки с атрибутом “rel=nofollow” (стандартная настройка почти всех блогов и CMS-ок) не учитываются при расчете рейтинга вашего сайта. Итак, регистрация на сайте нужна, давайте рассмотрим ее методику. Мы придумываем login (так, вариант petya занят, значит, пробуем petya2, petya.kozlov, только бы не забыть), теперь нужен пароль (так, мой стандартный пароль 123 не подходит по длине, значит здесь пароль будет 12345), затем email (так, где мой ящик для спама?), затем имя, адрес, дата рождения … И самое главное, ведь не на всякий сайт вы будете посещать ежедневно и спустя некоторое время вы забываете свои учетные данные. Помимо опасности забыть (ведь это так сложно, воспользоваться встроенным в браузер менеджером паролей), часто бывает просто лень предварительно регистрироваться на каком-то из “мириада” блогиков чтобы написать одно сообщение. Люди, активно живущие в сети, бывают озабочены тем, чтобы их “писанина” не потерялась и всегда была ассоциирована именно с ними любимыми (действительно, как ассоциировать vasya.kozlov на сайте site.ru с vasya123 на сайте site.com). Конечно, таких людей крайне мало, но проблема уникальной (и, главное, сквозной для множества сайтов) идентификации есть и давайте рассмотрим методику ее решения. Наиболее известны: microsoft passport, openid, cardspace, typekey. Каждая из технологий имеет свои плюсы и минусы, обусловленные подходом к решению трех целевых задач безопасности. Сказку про сложность регистрации и забывание паролей я не повторяю. Итак: защита от Fraud-ов (например, злоумышленники подменивают сайт, на котором вы вводите пароль). Далее: обеспечение privacy (если для посещения некоторого сайта требуется предварительно обратиться к поставщику идентификации за именем и паролем, то этот сайт поставщика может выполнять сбор сведений о том, какие сайты мы посещаем для своих целей). И последний фактор - Trust (доверие к поставщику). Как сайт-клиент системы аутентификации может принять решение о том, доверять ли пользователю, пришедшему от некоторого провайдера аутентификации? Системы typekey и passport построены как централизованные сервисы, т.е. база данных пользователей хранится в пределах одной организации, к которой выполняется обращение за подтверждением подлинности пользователя от некоторого сайта-клиента. Такой подход обеспечивает худо-бедно защиту от Fraud-ов, и решает вопрос доверия сайта клиента сервису аутентификации, а вот вопрос privacy остается открытым. На территории бывшего СССР и typekey и passport не распространены, вместо них используются openid и такие сервисы как “yandex.Паспорт”.
Openid - эта система децентрализованная … и в ней вопрос обеспечения защиты от Fraud-ов, Trust, Privacy, в принципе, не ставится. Идея в том, что всякий массовый сервис, который выполняет регистрацию пользователей (например, ЖивойЖурнал) выдает пользователю персональную страничку, на которой находятся специальные html-теги содержащие сведения об адресе сервера (правильнее говорить провайдера openid). Затем, когда вы заходите на какой-то блог, то можете при отправке формы комментария к сообщению, не регистрироваться, а указать в специальном поле ваш openid-идентификатор. Например, мой openid это http://blackzorro.livejournal.com/. Затем выполняется автоматический переход на сайт провайдера openid, где нас спрашивают доверяем ли мы сайту запросившему аутентификацию и какие из персональных данных мы хотим указать при этом: имя, email, страна, пол … Если мы подтверждаем и говорим: “да, я доверяю этому сайту”, то выполняется обратный переход и в отправленное сообщение подставляются данные взятые от openid-провайдера (вам не нужно повторно вводить свои персональные данные). Провайдер openid запоминает ваш выбор, так что при последующих посещениях сайта процедура аутентификации может быть выполнена “в один клик”. В прошлой статье, когда я описывал возможности FOAF, то упомянул о существовании тега foaf:openid. В следующем примере я показываю совместное использование этих двух технологий:
<foaf:Person>
<foaf:name>Вася Тапкин</foaf:name>
<foaf:mbox rdf:resource="mailto:vasyano@site.ru" />
<foaf:openid>tapkin.livejournal.com</foaf:nick>
</foaf:Person>
Fme– будут ли возвращены ссылки на страницы, помеченные как мои (<a href="vasya.ru" rel="me">). Переменная edo - признак поиска исходящих от меня узлов. Переменная edi – признак поиска входящих узлов. Значение параметра sgn я описал выше, а параметр pretty служит для того, чтобы полученные данные красиво визуализировать (в любом случае формат ответа от google – JSON, но с модификатором pretty результат будет смотреться более “человекочитаемо”). Последний параметр “callback=parse” говорит о том, после того как данные от google были загружены, то автоматически будет вызвана javascript-функция по имени parse. Вот небольшой фрагмент ответа google:
parse({
"canonical_mapping": {
"http://perso.hirlimann.net/~ludo/blog/": http://perso.hirlimann.net/~ludo/blog/"
},
"nodes": {
"http://en.wikipedia.org/wiki/SPARQL":
{
"attributes": {},
"claimed_nodes": [ ],
"unverified_claiming_nodes": [ http://advogato.org/person/softkid/diary.html?start\u003d95" ],
"nodes_referenced": { },
"nodes_referenced_by": {"http://advogato.org/person/softkid/diary.html?start\u003d95": {"types": ["me"]},
......
На этом все. Конечно же, тема Semantic Web очень большая, и о многом можно рассказать: о тех же микроформатах и об обещанном мною SPARQL. Но, наверное, это будет только спустя какое-то время.
« Семантическая сеть. Часть 3 | FOAM: физика и actionscript 3. Часть 1 » |