Тема: Стандарты

Пытался использовать ARC для парсинга данных с dbpedia.org.

Оказалось:
1) dbpedia не различает foaf:primaryTopic и foaf:primarytopic (на одной странице может быть и так и сяк), хотя на w3c написано что iri идентичны тогда и только тогда, когда абсолютно совпадают.

то есть фактически, если соблюдать стандарт, то foaf:primarytopic надо заигнорить

2) при запросе некоторых ресурсов dbpedia редиректит на описание другого ресурса, который считает более информативным. При этом единственная связь это foaf:primaryTopic.
Насколько я понимаю foaf:primaryTopic не подразумевает под собой автоматическое подтягивание другого ресурса, однако если зайти через браузер то так и происходит (вас редиректнет на страничку, на которой о запрашиваемом ресурсе и упоминания нет). например http://dbpedia.org/page/AfghanistanHistory

3) У dbpedia есть своя онтология и там есть dbpedia:redirect.
непонятно что оно значит и зачем нужно (видимо для внутренних нужд)
----------------------------

Собственно вопрос: а есть вообще стандарт того как должен вести себя сайт при выдаче семантической информации? И как собственно это поведение обрабатывать.

А то ведь получается что любой сайт может вести себя в этом плане как захочет и как с него инфу получить неизвестно.

Thumbs up Thumbs down

2

Re: Стандарты

Евгений, для меня, честно говоря, загадка, зачем может понадобиться парсить сайт DbPedia, если они предоставляют SPARQL-endpoint на базе Virtuoso: http://dbpedia.org/sparql.

Вопросы по DbPedia лучше перевести на английский (могу с этим помочь) и задать в мейл листе DbPedia-discussion. С высокой вероятностью получите развернутый ответ из первых рук. Но все же:

1. Приведите примеры страниц с foaf:primaryTopic и foafprimarytopic. Похоже на баг, причем на очень странный баг.

2. foaf:primaryTopic здесь действительно ни при чем. Если выполнить следующий запрос:

к dbpedia.org/sparql, то получим ответ, в котором задан redirect на History_Of_Afganistan.

Я не знаю, на основании чего формируются эти редиректы (за такими нюансами лучше ходить на мейл листы разработчиков). Вероятно, это хранящиеся где-то в Википедии синонимы.

3. про redirect упомянул во 2-м пункте.

По поводу стандартов. Я стандарт RDFа (а именно он используется в выдаче на dbpedia.org) наизусть не заучивал... но не помню там ничего такого. Да и я слабо представляю стандарт, регламентирующий редиректы.

Thumbs up +2 Thumbs down

Re: Стандарты

Idsa пишет:

Евгений, для меня, честно говоря, загадка, зачем может понадобиться парсить сайт DbPedia, если они предоставляют SPARQL-endpoint на базе Virtuoso: http://dbpedia.org/sparql.

Ну тут все просто - это может понадобиться по той же причине по которой вообще rdfa придумали.

Idsa пишет:

Вопросы по DbPedia лучше перевести на английский (могу с этим помочь) и задать в мейл листе DbPedia-discussion. С высокой вероятностью получите развернутый ответ из первых рук. Но все же:

1. Приведите примеры страниц с foaf:primaryTopic и foafprimarytopic. Похоже на баг, причем на очень странный баг.

Ну пример собственно http://dbpedia.org/resource/AfghanistanHistory. В заголовке html тут присутствует foaf:primarytopic.

Вопрос было бы задать неплохо, пишу я по английски весьма коряво:(. Собственно вопрос: "Почему в html заголовке (head) страницы http://dbpedia.org/resource/AfghanistanHistory присутствует foaf:primarytopic (видимо должно быть foaf:primaryTopic) и если это не ошибка как это должен обрабатывать парсер?"
И вопрос номер 2: "Как обрабатывать редиректы dbpedia при парсинге rdfa со страницы".

По второму вопросу: dbpedia с разных страниц отдает разные редиректы. К примеру когда вы заходите на http://dbpedia.org/resource/AfghanistanHistory вас редиректит 3 раза - два 303 (See Other)  редиректа и один 301 (Moved Permanently).

Idsa пишет:

2. foaf:primaryTopic здесь действительно ни при чем. Если выполнить следующий запрос:
select * where
{
  <http://dbpedia.org/resource/AfghanistanHistory> ?p ?o
}
к dbpedia.org/sparql, то получим ответ, в котором задан redirect на History_Of_Afganistan.

Я не знаю, на основании чего формируются эти редиректы (за такими нюансами лучше ходить на мейл листы разработчиков). Вероятно, это хранящиеся где-то в Википедии синонимы.

Вот собственно в этом и проблема, Эти редиректы требуют обработки, зашитой в код парсера. А если я к примеру сделаю свою myowl:superproperty и для корректной обработки она будет требовать логики зашитой в парсер, то теряется смысл rdfa как таковой.

Idsa пишет:

3. про redirect упомянул во 2-м пункте.

По поводу стандартов. Я стандарт RDFа (а именно он используется в выдаче на dbpedia.org) наизусть не заучивал... но не помню там ничего такого. Да и я слабо представляю стандарт, регламентирующий редиректы.

Ну таким стандартом является HTTP:) А про редиректы в rdfa действительно ничего нет - специально смотрел. Честно говоря я думал что возможно есть дополнение с описанием взаимосвязи rdfa и http. Скажем 303 редирект мог бы означать seeAlso.

Отредактировано Евгений (2010-09-25 12:00:32)

Thumbs up Thumbs down

4

Re: Стандарты

Евгений пишет:

Ну тут все просто - это может понадобиться по той же причине по которой вообще rdfa придумали.

В общем случае - да. Но я имел в виду, что не вижу смысла парсить HTML+RDFа, когда
1. есть SPARQL-endpoint
2. страница не предоставляет дополнительной информации по сравнению с данными в SPARQL-endpoint.
Ведь по сути, эта страничка отображает результат двух запросов:
1. Верхняя часть. Запрос свойств (например, "rdfs:label: something"):

SELECT * WHERE { <requestedUri> ?p ?o }

2. Нижняя часть. Запрос "обратных свойств", для которых наш uri используется как значение (например, "is foaf:primaryTopic of: someOtherUri"):

SELECT * WHERE { ?s ?p <requestedUri> }

Думаю, в этом случае эффективнее было бы работать непосредственно со SPARQL-endpoint, а не парсить странички.

Евгений пишет:

Ну пример собственно http://dbpedia.org/resource/AfghanistanHistory. В заголовке html тут присутствует foaf:primarytopic.

Ах вот оно что... Я-то смотрел на отрендеренную страничку, а там используется primartyTopic, а не primarytopic.
Кстати, в самой DbPedia предикаты хранятся в правильном регистре. В этом легко убедиться, выполнив два запроса:
1.

SELECT count(*) WHERE { ?s <http://xmlns.com/foaf/0.1/primaryTopic> ?o }

возвращает 7332468
2.

SELECT count(*) WHERE { ?s <http://xmlns.com/foaf/0.1/primarytopic> ?o }

возвращает 0

Если присмотреться к коду, можно заметить, что предикаты прописаны строчными буквами только в <head>: там и primarytopic, и describedby и т. д. - в <body> же все, как надо. И вот это уже вряд ли баг: сложно случайно прописать вызов функции преобразования uri в нижний регистр.

Погуглил немного, но нашел лишь, что имена префиксов (foaf, dppedia и т. д.) должны быть в нижнем регистре (взято отсюда):

Since CURIE prefix mappings have been specified using xmlns:, and since HTML attribute names are case-insensitive, CURIE prefix names declared using the xmlns:attribute-name pattern xmlns:<PREFIX>="<URI>" should be specified using only lower-case characters. For example, the text "xmlns:" and the text in "<PREFIX>" should be lower-case only. This is to ensure that prefix mappings are interpreted in the same way between HTML (case-insensitive attribute names) and XHTML (case-sensitive attribute names) document types.

На тему того, зачем было приводить к нижнему регистру значения атрибутов, найти ничего не удалось. В итоге решил задать вопрос: http://sourceforge.net/mailarchive/foru … discussion Ждемс...

Евгений пишет:

Вот собственно в этом и проблема, Эти редиректы требуют обработки, зашитой в код парсера. А если я к примеру сделаю свою myowl:superproperty и для корректной обработки она будет требовать логики зашитой в парсер, то теряется смысл rdfa как таковой.

Да, согласен. Хотя, с другой стороны, при запросе "Истории Афганистана" после множественных редиректов dbpedia.org все же покажет информацию об истории Афганистана. Таким образом в Гугле таки окажется страница об истории Афганистана с RDFa разметкой, а ведь в этом и заключается конечная цель. По-моему не так важно, что какие-то промежуточные uri не попадут в выдачу. Хотя здесь многое зависит от целей...

Евгений пишет:

Ну таким стандартом является HTTP:)

Это да smile Но я все же имел в виду стандарт семантической направленности.

Thumbs up Thumbs down

Re: Стандарты

Idsa пишет:

Думаю, в этом случае эффективнее было бы работать непосредственно со SPARQL-endpoint, а не парсить странички.

Ну эффективнее то да, в случае если вы работаете только с dbpedia. Если же вы обрабатываете произвольный url, то это малореалистично.

Idsa пишет:

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

На тему того, зачем было приводить к нижнему регистру значения атрибутов, найти ничего не удалось. В итоге решил задать вопрос: http://sourceforge.net/mailarchive/foru … discussion Ждемс...

Большре спасибо за помощь. В заголовках действительно присутсвуют линки с "правильными" property, хотя все равно непонятно почему в html они в нижнем регистре.
Префиксы в нижнем регистре сделаны потому как в xml (а соответсвенно в xhtml, rdf и т.д.) не разрешены имена тегов в верхнем регистре.

Idsa пишет:

Да, согласен. Хотя, с другой стороны, при запросе "Истории Афганистана" после множественных редиректов dbpedia.org все же покажет информацию об истории Афганистана. Таким образом в Гугле таки окажется страница об истории Афганистана с RDFa разметкой, а ведь в этом и заключается конечная цель. По-моему не так важно, что какие-то промежуточные uri не попадут в выдачу. Хотя здесь многое зависит от целей...

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

Thumbs up Thumbs down

6

Re: Стандарты

Евгений пишет:

Ну эффективнее то да, в случае если вы работаете только с dbpedia. Если же вы обрабатываете произвольный url, то это малореалистично.

Читаешь "Web of Data", подразумеваешь "DbPedia" (такие мысли навевает новая, да и старая диаграмма LOD) smile Ирония, конечно, но, думаю, если бы я сейчас взялся за задачу семантического парсинга страниц, ссылки на публичные массивы данных обрабатывал бы через SPARQL-endpoint.

Евгений пишет:

В заголовках действительно присутсвуют линки с "правильными" property, хотя все равно непонятно почему в html они в нижнем регистре.

Хм... Вроде же все наоборот smile

Префиксы в нижнем регистре сделаны потому как в xml (а соответсвенно в xhtml, rdf и т.д.) не разрешены имена тегов в верхнем регистре.

Нет-нет. В xml и производных от него языках разрешены теги в любых регистрах. Другое дело, что они case-sensitive. В HTML же имена тегов и параметров case-insensitive. А так как нам нужно выразить префикс при помощи case-insensitive HTML-атрибута xmlns:PREFIX, договорились использовать префиксы только в нижнем регистре (именно префиксы, а не их значения - URI). Что я и процитировал выше:

For example, the text "xmlns:" and the text in "<PREFIX>" should be lower-case only. This is to ensure that prefix mappings are interpreted in the same way between HTML (case-insensitive attribute names) and XHTML (case-sensitive attribute names) document types.

Case-insensitivity HTML'а касается имен, но не значений (по крайней мере в общем случае). Так что вопрос, зачем значения привели к нижнему регистру, остается открытым.

Евгений пишет:

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

В идеале - да. Да и то лишь, если стоит цель пропарсить каждый URI. Чувствую, что есть юзкейсы, для которых это критично... но реальные примеры в голову не идут.
В случае же с Гуглом и ему подобными, когда цель заключается в поиске конечной размеченной информации, все хорошо: они в итоге пробьются через редиректы и добьются своей цели. А это уже очень и очень много: хотя бы ради этого стоило разрабатывать и внедрять RDFa smile

Отредактировано Idsa (2010-09-25 22:48:24)

Thumbs up +1 Thumbs down

Re: Стандарты

Idsa пишет:

Читаешь "Web of Data", подразумеваешь "DbPedia" (такие мысли навевает новая, да и старая диаграмма LOD) smile Ирония, конечно, но, думаю, если бы я сейчас взялся за задачу семантического парсинга страниц, ссылки на публичные массивы данных обрабатывал бы через SPARQL-endpoint.

Ну реальность конечно такова, но всегда хочется идеализировать/универсилизировать то что делаешь:)
Вобщем с этим все понятно.

Idsa пишет:

Хм... Вроде же все наоборот smile

В веб разработке под заголовками обычно понимается заголовки http.

Нет-нет. В xml и производных от него языках разрешены теги в любых регистрах.

Ну спорить не буду, но в xhtml имена тегов в верхнем регистре "не работают".

Case-insensitivity HTML'а касается имен, но не значений (по крайней мере в общем случае). Так что вопрос, зачем значения привели к нижнему регистру, остается открытым.

К сожалению да..

Чувствую, что есть юзкейсы, для которых это критично... но реальные примеры в голову не идут.

Ну вот я например в данный момент занимаюсь созданием визуального конструктора туров (туристичексих).
Есть мысль прицепить туда данные по городам, странам, отелям и достопримечательностям из dbpedia. Вобщем то можно было бы просто дергать через sparql данные, но тогда все будет довольно медленно. Кешировать результаты к сожелению затруднительно в силу того что их еще как то надо мержить с данными туроператора.
Вобщем это лирика, а смысл в том что для этого нужно хранить данные в своей базе, а для этого они должны быть связаны, а это не получается без понимания смысла редиректов в dbpedia.

Спасибо за помощь. Теперь я знаю куда смотреть чтобы получить полную инфу по странице:)

Thumbs up Thumbs down

8

Re: Стандарты

Евгений пишет:

В веб разработке под заголовками обычно понимается заголовки http.

Виноват, header'ы принял за head. Кстати, единственным ответом на мой вопрос на dbpedia-discussion является ответ Kingsley Idehen (OpenLink CEO) как раз о том, что в HTTP-хедерах все прописано правильно и, по идее, то же самое должно быть прописано в блоке HEAD.

Евгений пишет:

Ну спорить не буду, но в xhtml имена тегов в верхнем регистре "не работают".

Сам XML не накладывает ограничений на регистр, а на xhtml наложена XML Schema: http://www.w3.org/TR/xhtml1-schema/

Евгений пишет:

Вобщем то можно было бы просто дергать через sparql данные, но тогда все будет довольно медленно.

Хм... Не пойму, как обращение к SPARQL-endpoint может быть медленнее парсинга страницы? Кроме того, можно поднять свой маленький локальный SPARQL-endpoint только с необходимыми данными.

Thumbs up +1 Thumbs down

Re: Стандарты

Idsa пишет:

Сам XML не накладывает ограничений на регистр, а на xhtml наложена XML Schema: http://www.w3.org/TR/xhtml1-schema/

Да, никогда не обращал внимания, виноват что туповат:)

Idsa пишет:

Хм... Не пойму, как обращение к SPARQL-endpoint может быть медленнее парсинга страницы? Кроме того, можно поднять свой маленький локальный SPARQL-endpoint только с необходимыми данными.

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

Thumbs up Thumbs down