Добавление пустых узлов в тройки - PullRequest
2 голосов
/ 15 сентября 2011

Код, написанный ниже, дает следующий вывод:

Код:

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>

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

Ваш вопрос здесь немного расплывчатый, для начала желаемый вывод на самом деле является недопустимым RDF / XML, поэтому вы не можете сгенерировать его, даже если захотите. Вы даже пытались запустить его через W3C RDF Validator и откуда именно он взялся?

Есть ли причина, по которой вы пытаетесь сгенерировать RDF / XML, который соответствует определенному шаблону?

ИМХО, это очень плохая практика, и вам действительно не следует пытаться это делать.
Весь смысл RDF заключается в том, что это модель данных, основанная на принципах тройного подхода, которая отделена от фактической сериализации данных. Вы действительно никогда не должны пытаться создавать RDF на основе желаемой сериализации, вы должны создавать тройки RDF, которые выражают ваши данные, которые из минимального фрагмента кода, который вы показали, кажутся тем, что вы делаете.

Итак, еще раз повторю, зачем вам генерировать RDF / XML в определенном стиле? Предполагая, что у вас есть для этого какая-то причина, возможно, есть лучший способ достичь цели, к которой вы стремитесь, и если вы предоставите более подробную информацию, у людей будет больше шансов помочь вам соответствующим образом

0 голосов
/ 16 сентября 2011

Похоже, что вы как-то неправильно зацикливаетесь на 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)))
...