下面写的代码给出了以下输出:
代码:
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: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>
但是我需要关注输出,请你指出它有什么问题。
<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>
提前致谢。
答案 0 :(得分:0)
似乎你错误地在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)))
答案 1 :(得分:0)
你的问题在这里有点模糊,首先你想要的输出实际上是无效的RDF / XML,所以即使你想要也无法生成它。您是否尝试通过W3C RDF Validator运行它以及它究竟来自何处?
您是否有理由尝试生成适合特定模式的RDF / XML?
恕我直言,这是非常糟糕的做法,你真的不应该试着这样做 RDF的重点在于它是一个基于三元组的数据模型,它与数据的实际序列化是分开的。您应该永远不会尝试根据所需的序列化创建RDF,您应该创建表达数据的RDF三元组,这些三元组从您显示的最小代码段看起来就像您正在做的那样。
所以我再次重申,为什么需要以特定的方式生成RDF / XML?假设你有这样的理由可能有更好的方法来实现你的实际目标,如果你提供更多的细节,人们将有更好的机会能够适当地帮助你