在W3C 的 RDF Turtle 文档中,我遇到了两个使用电子邮件地址作为 IRI 的示例(16 和 17):
_:b <http://xmlns.com/foaf/0.1/mbox> <bob@example.com> .
Run Code Online (Sandbox Code Playgroud)
据我了解,如果电子邮件地址前面带有适当的方案(即mailto:bob@example.com. 如果上例中的电子邮件地址应该是有效的 URI,则该语句实际上应为:
_:b <http://xmlns.com/foaf/0.1/mbox> <mailto:bob@example.com> .
Run Code Online (Sandbox Code Playgroud)
这是文档中的错误还是 IRI(与 URI 相对)不需要方案?
在Django 3.0 发行说明中,有这样的评论url_has_allowed_host_and_scheme:
\n\n\n为了避免有效范围可能出现的混淆,私有内部实用程序
\nis_safe_url()被重命名为url_has_allowed_host_and_scheme(). URL 具有允许的主机和方案通常并不意味着它\xe2\x80\x99s \xe2\x80\x9csafe\xe2\x80\x9d。例如,它可能仍然被错误地引用。确保同时使用iri_to_uri()不受信任的 URL 的路径组件。
我明白这样做的目的url_has_allowed_host_and_scheme是什么。以提供查询参数的常见用例next为例:http://example.com/foobar?next=http%3A%2F%2Fexample2.com%2Fhello。您可以对处理此路径的视图进行编程,以重定向到参数提供的 URL next,在本例中为: \n http://example2.com/hello。如果 URL 未经验证,则这是一个“开放重定向”漏洞。恶意行为者可能会利用开放重定向将恶意 URL 隐藏在看似可信的 URL 后面。
您可以使用它url_has_allowed_host_and_scheme来确保 URL 具有预期的主机名和方案。
我的问题是关于iri_to_uri. 该文档暗示您还需要使用此功能。我什么时候需要使用它?
我想知道使用片段标识符格式引用实体是否更好/适当 - 基本上是通过在名称前插入哈希
[url] + # + [name] => http://example.com/page/#webPage
编辑:
根据来自慷慨和伟大的@Unor的回复,我添加了这个编辑以试图限制我的查询范围并澄清我遇到的主要问题.我还删除了大部分原始问题(大约95%)(事后看来)我觉得有缺点:1.我的核心问题; 2.对未来读者的好处.
这是我的问题:
在微数据的itemid和json-ld的@id值开始时手动键入哈希的做法是否有效?
以下是我更详细的问题:
我可以在微数据的itemid值和json-ld的@id值中插入HASH符号(#),以便通过正确有效地使用片段标识符来创建有效的结果URI吗?
所以,如果这是在网页上:
<div itemscope itemtype="http://www.schema.org/Person" itemid="#joe"></div>
Run Code Online (Sandbox Code Playgroud)
或者,如果这也在网页上:
{"@context":"http://schema.org",
"@type":"Person",
"@id":"#Joe"}
Run Code Online (Sandbox Code Playgroud)
我知道他们会被读到这样的uri(假设消费者的相对构造是谷歌的结构化数据测试工具):
http://www.example.com/page#joe
Run Code Online (Sandbox Code Playgroud)
那是uri:
有效的uri; 和
是否正确使用片段标识符(HASH)?
上下文:我正在创建一个将其数据存储在 location.hash 中的应用程序。我想编码尽可能少的字符以保持最大的易读性。
正如此答案中所解释的,URL 的每个段的保留字符都不同。那么 URL Fragment/location.hash 具体有哪些限制呢?
相关文章: URL 中的 Unicode 字符
例子:
http://data.doremus.org/activity/587ae689-790e-3525-9e3a-dac63f449a03
Run Code Online (Sandbox Code Playgroud)
我认为它是一个IRI,也是一个URI。(我对吗?)
我使用 OWL API 来解析它。在“IRI”类中,有一个方法getShortForm(),当我使用它时,我得到“ae689-790e-3525-9e3a-dac63f449a03”。
关于URI,我认为它的本地名称是“587ae689-790e-3525-9e3a-dac63f449a03”。我不太确定。其实我是从别人的博客上知道“土名”这个词的。我在 URI 的结构中找不到“本地名称”,如下所示。
Run Code Online (Sandbox Code Playgroud)scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
所以,我有两个问题:
IRI 的简称是什么?为什么示例的简写形式不是“587ae689-790e-3525-9e3a-dac63f449a03”?
URI 的本地名称是什么?示例的本地名称是什么?
我正在尝试使用Jena框架处理RDF 的工具(Elda).
我收到了这个错误:
错误[qtp1415899750-24](RouterRestlet.java:332) - 异常:第7行,第72列:com.hp.hpl.jena.iri.impl.IRIImplException:代码:0/ILLEGAL_CHARACTER在FRAGMENT中:该字符违反了语法规则对于URI/IRI.
它说以下URL不是有效的IRI.
http://burckhardt.netseven.it/show_annotable_transcription?id=12#xpointer(start-point(string-range(//DIV[@about='http://burckhardt.netseven.it/show_annotable_transcription?id=12' ]/DIV [1]/BLOCKQUOTE [1]/P [1] /文本()[1], '',13))/范围 - (字符串范围(// DIV [@约=的"http:/ /burckhardt.netseven.it/show_annotable_transcription?id=12']/DIV[1]/BLOCKQUOTE[1]/P[1]/text()[1],'',27)))
我知道它很丑,但据我所知,它符合XPointer规范......而且我在其他环境中成功使用它(例如Sesame triplestore).
有人弄错了吗?
谢谢
基督教