我正在尝试了解 RDF/XML 基础知识。我在理解数据引用时遇到问题。
举一个简单的例子,让我们考虑Person和Document之间的关系。
在关系数据模型中,这将是一个简单的一对多关系(一个人可以有很多文档,但一个文档只能属于一个人)。所以这可以通过在文件表中加入 person_id 来解决。
但是我如何在 RDF/XML 中实现类似的东西呢?
我定义了我的 <namespace:Person rdf:about="http://www.foo.com">具有所有属性,我也有 <namespace:Document rdf:about="http://www.bar.com"> , 但文档属于 id = x 的人的正确说法是什么?
最佳答案
RDF 是一种使用三元组(又名 RDF 语句)来表达数据的模型。每个语句都有一个主语、一个谓语和一个宾语。通常,谓语表示主语和宾语之间的关系。可以将此类语句的集合视为一个图(主语和宾语作为顶点,谓语作为边)。
所以在您的文档和人员示例中,让我们首先建立文档和人员之间的什么关系。举个例子,假设您希望表达一个文档有一个作者,他是一个人。
如果我们将其应用于特定文档 ex:d1 和特定人员 ex:p1,我们只需编写以下三元组来表达关系:
ex:d1 a ex:Document;
ex:hasAuthor ex:p1 .
ex:p1 a ex:Person .
顺便说一句,以上是 Turtle 语法,一种更易于读/写的 RDF 语法。查看RDF Primer了解详情。
在 RDF/XML 语法中,相同的数据看起来像这样:
<ex:Document rdf:about="http://example.org/d1">
<ex:hasAuthor rdf:resource="http://example.org/p1"/>
</ex:Document>
<ex:Person rdf:about="http://example.org/p1"/>
但是,就像我在评论中提到的:尝试和理解抽象的 RDF 建模(考虑三元组和图)比尝试理解如何编写 RDF/XML 更有效。
回到示例:上面显示了如何为特定 文档和特定 人之间的关系建模。如果您希望表达“文档和人员是可以通过作者关系相关的类”等更一般的信息,您可以使用 RDF Schema 词汇表。你可以这样表达:
ex:Document a rdfs:Class .
ex:Person a rdfs:Class .
ex:hasAuthor a rdf:Property ;
rdfs:domain ex:Document ;
rdfs:range ex:Person .
请注意,RDF 模式与关系模式不同!关系模式的目的是规定结构并允许数据验证。 RDF 词汇表(或本体)用于描述世界。综上所述,我们的世界存在文件和人,如果两个事物之间存在“作者”关系,那么这两个事物就是文件和人。
关于xml - 在 RDF/XML 中引用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49712378/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的rubyyaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir
我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我
如thisanswer中所述,Array.new(size,object)创建一个数组,其中size引用相同的object。hash=Hash.newa=Array.new(2,hash)a[0]['cat']='feline'a#=>[{"cat"=>"feline"},{"cat"=>"feline"}]a[1]['cat']='Felix'a#=>[{"cat"=>"Felix"},{"cat"=>"Felix"}]为什么Ruby会这样做,而不是对object进行dup或clone? 最佳答案 因为那是thedocumenta
假设我有一个可枚举对象enum,现在我想获取第三个项目。我知道一种通用方法是转换成数组,然后使用索引访问,如:enum.to_a[2]但这种方式会创建一个临时数组,效率可能很低。现在我使用:enum.each_with_index{|v,i|breakvifi==2}但这非常丑陋和多余。执行此操作最有效的方法是什么? 最佳答案 你可以使用take剥离前三个元素,然后剥离last从take给你的数组中获取第三个元素:third=enum.take(3).last如果您根本不想生成任何数组,那么也许:#Ifenumisn'tanEnum
我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::
我正在遍历数组中的一组标签名称,我想使用构建器打印每个标签名称,而不是求助于“我认为:builder=Nokogiri::XML::Builder.newdo|xml|fortagintagsxml.tag!tag,somevalendend会这样做,但它只是创建名称为“tag”的标签,并将标签变量作为元素的文本值。有人可以帮忙吗?这个看起来应该比较简单,我刚刚在搜索引擎上找不到答案。我可能没有以正确的方式提问。 最佳答案 尝试以下操作。如果我没记错的话,我添加了一个根节点,因为Nokogiri需要一个。builder=Nokogi
这是一些奇怪的例子:#!/usr/bin/rubyrequire'rubygems'require'open-uri'require'nokogiri'print"withoutread:",Nokogiri(open('http://weblog.rubyonrails.org/')).class,"\n"print"withread:",Nokogiri(open('http://weblog.rubyonrails.org/').read).class,"\n"运行此返回:withoutread:Nokogiri::XML::Documentwithread:Nokogiri::
我正在尝试加载SAML协议(protocol)架构(具体来说:https://www.oasis-open.org/committees/download.php/3407/oasis-sstc-saml-schema-protocol-1.1.xsd),但在执行此操作之后:schema=Nokogiri::XML::Schema(File.read('saml11_schema.xsd'))我得到这个输出:Nokogiri::XML::SyntaxErrorException:Element'{http://www.w3.org/2001/XMLSchema}element',att
代码:threads=[]Thread.abort_on_exception=truebegin#throwexceptionsinthreadssowecanseethemthreadseputs"EXCEPTION:#{e.inspect}"puts"MESSAGE:#{e.message}"end崩溃:.rvm/gems/ruby-2.1.3@req/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:478:inload_missing_constant':自动加载常量MyClass时检测到循环依赖稍加研究后,