据我所知,语义网由 URI 的三元组组成。命名空间速记在日常使用中被广泛用于缩写它们。我认为, namespace 简写可以通过简单的连接扩展为 URI,例如著名的 dc: 命名空间(定义为 http://purl.org/dc/elements/1.1/,请注意最后一个字符是 /) 将扩展为,因此在语义上等于 http://purl.org/dc/elements/1.1/title.
然后我发现了一些 namespace 定义,它们在末尾缺少合理的分离字符。来自 http://live.dbpedia.org/sparql?nsdecl 的一些示例
还有一些来自 Most common RDF namespaces列表:
如何将此类 namespace 扩展为有效的链接数据 URI?
W3C 推荐 Namespaces in XML定义:“一个扩展名是由namespace name组成的一对。和一个 local name ”还有 Fredrik Lundh writes on effbot.org :“在元素树中,限定名称存储为 Clark 符号中的通用名称,它将 URI 和本地部分组合成一个字符串,给出为‘{uri}local’。”这可能适用于广泛的用例,但它不符合链接数据由 URI 组成的想法,URI 不能以 { 开头。
我原以为 xsd:element 不应该 扩展为 http://www.w3.org/2001/XMLSchemaelement在链接数据中(也不到{http://www.w3.org/2001/XMLSchema}element),应该吗?必须如何正确实现?
最佳答案
来自RDF/XML Syntax Specification (Revised) [重点添加]:
In order to encode the graph in XML, the nodes and predicates have to be represented in XML terms — element names, attribute names, element contents and attribute values. RDF/XML uses XML QNames as defined in Namespaces in XML [XML-NS] to represent RDF URI references. All QNames have a namespace name which is a URI reference and a short local name. In addition, QNames can either have a short prefix or be declared with the default namespace declaration and have none (but still have a namespace name)
The RDF URI reference represented by a QName is determined by appending the local name part of the QName after the namespace name (URI reference) part of the QName. This is used to shorten the RDF URI references of all predicates and some nodes. RDF URI references identifying subject and object nodes can also be stored as XML attribute values. RDF literals, which can only be object nodes, become either XML element text content or XML attribute values.
这是简单的串联。重要的是串联的结果。这意味着我可以使用
@prefix dcterms: <http://purl.org/dc/terms/>
@prefix dctermsx: <http://purl.org/dc/terms/accrual>
dcterms:accrualPolicy === http://purl.org/dc/terms/accrualPolicy
dctermsx:Policy === http://purl.org/dc/terms/accrualPolicy
dcterms:accrualPeriodicity === http://purl.org/dc/terms/accrualPeriodicity
dctermsx:Periodicity === http://purl.org/dc/terms/accrualPeriodicity
有趣的是,RDF/XML 语法规范必须定义如何解释 QName。为什么它不直接继承 XML QName 规范的含义呢?答案在the article你引用的:
The XML Namespaces specification doesn’t explicitly state how an application should treat the (URI, local part) pair. While most applications treat them as two distinct components, some applications expect you to combine them in different ways.
在 RDF/XML 中,应用程序将(URI,本地部分)对视为对 URI 的引用,该 URI 是 uri 和 local< 的串联/em="">,如 RDF 语法文档的初始引文中所述。当然,惯例是词汇表定义的 URI 有一个公共(public) namespace ,并且使用该 namespace 作为 XML 前缀很容易编写术语,因此在实践中您不会看到那种 namespace 重整我在上面用 DCMI 术语显示的。
在 ElementTree 中,QName 对应于 {uri}local。这就是该应用程序 处理(URI,本地部分)对的方式。 RDF/XML 序列化必须是有效的 XML 这一事实带来了复杂性。不是每个URI都可以表示为QName,因为有些URI不能表示为QName,因为在QName 另一个复杂或困惑的原因是除了 RDF/XML 之外还有 RDF 序列化,其中一些采用了表面上类似于 XML QName 的前缀/后缀表示法,但放宽了其中的一些限制,因此您可能查看不是有效 XML QName 的前缀/后缀组合,但对于这些格式来说没问题。 在 DBpedia SPARQL 端点上定义的前缀突出了这个问题。来自 SPARQL 标准,第 4.1.1.1 Prefixed Names 节[重点添加]: The 在这种情况下,前缀如 在 RDF/XML 序列化中是无用的,因为您需要编写非法的东西,例如 namespace:localname中,namespace中可以出现哪些字符是有限制的 和 name。例如,http://127.0.0.1/789234,您不能为它使用像localhost:789234 这样的漂亮 QName,因为本地名称不能以数字开头. (例如,请参阅 Jena 用户邮件列表中的 this thread。)
PREFIX keyword associates a prefix label with an IRI. A prefixed name is a prefix label and a local part, separated by a colon ":". A prefixed name is mapped to an IRI by concatenating the IRI associated with the prefix and the local part. The prefix label or the local part may be empty. Note that SPARQL local names allow leading digits while XML local names do not. SPARQL local names also allow the non-alphanumeric characters allowed in IRIs via backslash character escapes (e.g. ns:id\=123). SPARQL local names have more syntactic restrictions than CURIEs.amz => http://webservices.amazon.com/AWSECommerceService/2005-10-05
amz:#something 或 amz:/something,它将是在 SPARQL 中很有用(如果可能不方便),您可以编写 amz:\#something 和 amz:\/something。
关于xml - 将没有定义结束字符的 xml 命名空间正确扩展为有效的 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17230712/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/