Обработка URI в качестве параметра запроса в семантических веб-приложениях

За последние несколько лет в ряде приложений я использовал RDF в качестве модели данных и использовал Jena для управления и запроса данных. Для новых приложений я стараюсь разрабатывать приложения, которые будут RESTful, и URL-адреса в приложении обычно имеют некоторое представление в RDF. Например:

http://example.com/foo/bar/1/

Однако иногда вам нужно развернуть или вызвать URI из сервлета в параметре запроса:

http://example.com/foo/bar/1/?id=http://example.com/foo/bar/xyz/

URL-адреса становятся довольно уродливыми и недружественными, особенно когда они закодированы:

http://example.com/foo/bar/1/?id=http%3A%2F%2Fexample.com%2Ffoo%2Fbar%2Fxyz%2F

Существует ли лучшая практика в дизайне? Должен ли я создавать в RDF отдельное более короткое значение, чем URI, по которому я могу делать запросы?


person MikeJ    schedule 14.05.2012    source источник


Ответы (3)


Не уверен, что с этим можно что-то сделать. Если вы думаете о другом веб-приложении, установленным стандартом являются относительные URL-адреса, то есть разрешение аргумента id по URL-адресу запроса:

http://example.com/foo/bar/1/?id=/foo/bar/xyz/
http://example.com/foo/bar/1/?id=../xyz/

(кодировать по мере необходимости)

Это помогает в приведенных примерах, поскольку два URL-адреса находятся в одном домене. В противном случае, я полагаю, вам просто нужно принять полные URL-адреса.

Префиксы, конечно, обычно используются в мире RDF, но это не похоже на RESTful, если вы не предоставляете средства для поиска сопоставлений.

person user205512    schedule 14.05.2012

Если у вас есть известный или известный набор префиксов, то сокращение URI до q-имен — это шаблон, который я использовал в прошлом:

http://example.com/foo/bar/1/?id=example:xyz

В API связанных данных короткие имена объектов могут быть объявляется в конфигурации, обычно путем указания того, какое свойство ресурса используется для обозначения его короткого имени (например: rdfs:label или skos:notation). Таким образом, шаблон заключается в использовании небольшого количества информации о конфигурации для предоставления сокращений имен через саму модель RDF.

person Ian Dickinson    schedule 14.05.2012

Во-первых, посмотрите похожие посты на answer.semanticweb.com:

Возможно, вы захотите рассмотреть возможность хранения ресурсов в конечной точке SPARQL, сделав их доступными для разыменования с помощью следующего правила перезаписи:

RewriteCond %{HTTP_ACCEPT} (text/turtle|application/rdf+xml)
RewriteRule !^/sparql /sparql?query=CONSTRUCT\s{?s\s?p\s?o}\sWHERE\s{?s\s?p\s?o.\s<%{REQUEST_SCHEME}://%{HTTP_HOST}%{REQUEST_URI}%{QUERY_STRING}>\s?p\s?o} [L,R=303]

Я думаю, что в целом разыменование URI гораздо предпочтительнее, чем передача URI в виде строки запроса. В зависимости от вашей инфраструктуры вы даже можете использовать URI в качестве первичного ключа для объекта домена (возможно в GRAILS и RAILS).

person William Greenly    schedule 15.05.2012