Python 在三元组中添加空白节点

Python 在三元组中添加空白节点,python,rdf,rdflib,blank-nodes,Python,Rdf,Rdflib,Blank Nodes,下面编写的代码提供以下输出: 代码: 输出: <rdf:Description rdf:about="http://www.iamresearcher.com/profiles/id/luc.moreau"> <foaf:knows rdf:nodeID="kdOAGjqG160"/> </rdf:Description> <rdf:Description rdf:nodeID="kdOAGjqG160"> <t:data>1

下面编写的代码提供以下输出:

代码:

输出:

<rdf:Description rdf:about="http://www.iamresearcher.com/profiles/id/luc.moreau">
  <foaf:knows rdf:nodeID="kdOAGjqG160"/>
</rdf:Description>

<rdf:Description rdf:nodeID="kdOAGjqG160">
  <t:data>1</t:data>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/patrick.hayes"/>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/christian.queinnec"/>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/thanassis.tiropanis"/>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/ian.foster"/>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/nicholas.gibbins"/>
</rdf:Description>

1.
但我需要下面的输出,请您指导它有什么问题

<rdf:Description rdf:about="http://www.iamresearcher.com/profiles/id/luc.moreau">
<foaf:knows>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/patrick.hayes">
    <t:data>1</t:data>
  </foaf:Person>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/christian.queinnec">
    <t:data>1</t:data>
  </foaf:Person>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/thanassis.tiropanis">
    <t:data>1</t:data>
  </foaf:Person>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/ian.foster">
    <t:data>1</t:data>
  </foaf:Person>
  <foaf:Person rdf:resource="http://www.iamresearcher.com/profiles/id/nicholas.gibbins">
    <t:data>1</t:data>
  </foaf:Person>
</foaf:knows>
</rdf:Description>

1.
1.
1.
1.
1.

提前感谢。

您似乎在bNode
person
上错误地循环。您总是使用相同的bNode,这可能是导致错误的原因

所以如果你的代码看起来像

person = BNode()
for (fetchKnowsRowString, trustString) in friends:
   dataStore.add((URIRef(stringrd),FOAF_NS['knows'],person))
   dataStore.add((person,FOAF_NS['Person'],URIRef(fetchKnowsRowString)))
   dataStore.add((person,TRUST_NS['hasValue'],Literal(trustString)))
那么错误是您使用的是同一个bNode实例。您的代码应该与下面的代码片段类似。请注意,bNode创建在循环内部,这是主要区别

for (fetchKnowsRowString, trustString) in friends:
   person = BNode()
   dataStore.add((URIRef(stringrd),FOAF_NS['knows'],person))
   dataStore.add((person,FOAF_NS['Person'],URIRef(fetchKnowsRowString)))
   dataStore.add((person,TRUST_NS['hasValue'],Literal(trustString)))

似乎您在bNode
person
上的循环有点错误。您总是使用相同的bNode,这可能是导致错误的原因

所以如果你的代码看起来像

person = BNode()
for (fetchKnowsRowString, trustString) in friends:
   dataStore.add((URIRef(stringrd),FOAF_NS['knows'],person))
   dataStore.add((person,FOAF_NS['Person'],URIRef(fetchKnowsRowString)))
   dataStore.add((person,TRUST_NS['hasValue'],Literal(trustString)))
那么错误是您使用的是同一个bNode实例。您的代码应该与下面的代码片段类似。请注意,bNode创建在循环内部,这是主要区别

for (fetchKnowsRowString, trustString) in friends:
   person = BNode()
   dataStore.add((URIRef(stringrd),FOAF_NS['knows'],person))
   dataStore.add((person,FOAF_NS['Person'],URIRef(fetchKnowsRowString)))
   dataStore.add((person,TRUST_NS['hasValue'],Literal(trustString)))

您的问题在这里有点含糊,首先,您想要的输出实际上是无效的RDF/XML,所以即使您想要,也无法生成它。你有没有试着把它放在电脑里,它到底是从哪里来的

您试图生成适合特定模式的RDF/XML有什么原因吗

我认为这是一个非常糟糕的练习,你真的不应该尝试这样做。
RDF的全部要点在于它是一个基于三元组的数据模型,与数据的实际序列化是分开的。您真的不应该尝试基于所需的序列化创建RDF,您应该创建RDF三元组来表达您的数据,您所显示的最小代码片段似乎就是您正在做的事情


所以我要再次重申,为什么需要以特定的样式生成RDF/XML?假设你有这样的理由,可能有更好的方法来实现你的实际目标,如果你提供更多的细节,人们将有更好的机会来适当地帮助你,你的问题在这里有点模糊,首先,您想要的输出实际上是无效的RDF/XML,所以即使您想要,也无法生成它。你有没有试着把它放在电脑里,它到底是从哪里来的

您试图生成适合特定模式的RDF/XML有什么原因吗

我认为这是一个非常糟糕的练习,你真的不应该尝试这样做。
RDF的全部要点在于它是一个基于三元组的数据模型,与数据的实际序列化是分开的。您真的不应该尝试基于所需的序列化创建RDF,您应该创建RDF三元组来表达您的数据,您所显示的最小代码片段似乎就是您正在做的事情

所以我要再次重申,为什么需要以特定的样式生成RDF/XML?假设你有这样的理由,可能有更好的方法来实现你的实际目标,如果你提供更多的细节,人们将有更好的机会能够适当地帮助你