在语义Web应用中将URI作为请求参数处理

3
在过去几年中,在许多应用程序上,我使用RDF作为数据模型并使用Jena管理和查询数据。对于新应用程序,我尝试设计RESTful应用程序,并且应用程序中的URL通常在RDF中有某种表示。例如:http://example.com/foo/bar/1/。然而,偶尔需要从请求参数中的servlet深入或调用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不同的较短的值,以便可以进行查询吗?
3个回答

3

首先,在answers.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上可能是可能的)。

3

如果您有一个已知的或可知的前缀集,则将URI缩写为q-names是我过去使用的一种模式:

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

链接数据API中,可以通过配置声明实体的短名称,通常是通过说明资源的哪个属性用于表示其短名称(例如:rdfs:labelskos:notation)。因此,模式是使用少量的配置信息通过RDF模型本身提供名称缩写。

0

一般来说,你可能无法对此做太多事情。如果你考虑其他网络应用程序,已经建立了相对URL的标准,即根据请求URL解析id参数:

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

(根据需要进行编码)

在提供的示例中,这有助于,因为两个URL位于同一域中。否则,我想您只能接受完整的URL。

前缀在RDF世界中通常被使用,但是除非您提供了一种查找映射的方法,否则它不太符合RESTful的要求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接