2012-05-19 2 views
2

Хорошо, у меня есть проблема. Я был бы рад, что кто-то пролил свет. В принципе у меня есть следующий пример нижеДобавление детей младшего возраста в RDF с использованием Jena

<rdf:Description rdf:about="http://test.com"> 
<hasX></hasX> 
<hasY></hasY> 
<hasA></hasA> 
<hasA></hasA> 
<hasA></hasA> 
</rdf:Description> 

Я пытаюсь произвести следующие действия:

<rdf:Description rdf:about="http://test.com"> 
<hasX></hasX> 
<hasY></hasY> 
<hasZ> 
<hasA></hasA> 
<hasA></hasA> 
<hasA></hasA> 
</hasZ> 
</rdf:Description> 

Я пытался добавить собственность к собственности то ресурс, объявив новый ресурс, добавив литералов, каждая возможная комбинация из них, однако те, которые я получил, - это создать новый блок описания rdf: содержащий данные, которые я хочу, вне оригинального описания rdf: это делает его бесполезным.

Я действительно не хочу другой <rdf:Description rdf:about=""> для описания тегов A.

Вот небольшой пример тест

String NS = "http://example.com/test";  
Model m = ModelFactory.createDefaultModel(); 
Resource r = m.createResource("http://meetup/nyc"); 

Property p = m.createProperty(XmlParser.NS + "hasData"); 
Property p2 = m.createProperty(XmlParser.NS + "hasData"); 
Property p3 = m.createProperty(XmlParser.NS + "hasData"); 

r.addProperty(p, "somedata"); 
r.addProperty(p2, "somedata2"); 
r.addProperty(p3, "somedata3"); 

m.write(System.out); 
+2

Вы получили ответ от MikeJ. Кстати, я предлагаю вам начать думать о тройках RDF и не пытаться искать/изучать RDF из его сериализации RDF/XML. Вместо этого используйте Turtle или N-Triples. Думайте графы, а не деревья. – castagna

+1

Кастаньа делает очень хорошую точку. Когда я начал искать RDF, я использовал RDF/XML, и было сложно не сохранить ментальную модель XML и деревьев, а не тройки и графики. Переход на Черепаху помог бы. – MikeJ

ответ

2

Создание Resource из модели не добавляет его к этой модели. Я обычно добавляют троек к модели с помощью одного из add методов класса Model:

String NS = "http://example.com/test#"; 
    Model m = ModelFactory.createDefaultModel(); 
    Resource r = m.createResource("http://meetup/nyc"); 

    Property p = m.createProperty(NS + "hasData"); 

    m.add(r, p, "somedata"); 
    m.add(r, p, "more data"); 

    m.write(System.out); 

Это создаст:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
      xmlns:j.0="http://example.com/test#" > 
    <rdf:Description rdf:about="http://meetup/nyc"> 
     <j.0:hasData>more data</j.0:hasData> 
     <j.0:hasData>somedata</j.0:hasData> 
     </rdf:Description> 
    </rdf:RDF> 
+0

Спасибо за пример, однако я все еще не уверен, что можно написать модель, которая выводит мой пример выше, это моя цель. Просто хочу отметить, что у меня уже есть полная рабочая модель моих данных, я просто хочу добавить дочерний дочерний элемент к ребенку, как показано в примере, снова спасибо – Ash

+0

'm.add (m.createStatement (s, p, o)) 'может быть сокращено до' m.add (s, p, o) ' –

+0

Ash - я не думаю, что вы можете получить нужную структуру без дополнительных URI или bnodes. RDF с использованием объекта, предиката, объекта, но вы хотите отбросить предметный аспект в hasZ до hasA дерева, которое вы укажете в своем примере. – MikeJ

2

Как и другие ответчики сказали, не думаю, что с точки зрения структуру дерева XML. Однако, если просмотр вашего графика в дереве XML полезен для вашего понимания модели, измените выходной синтаксис на компактную форму RDF/XML:

m.write(System.out, "RDF/XML-ABBREV"); 
+0

Спасибо за это! Я полностью понимаю, что вы, ребята, говорите, и я действительно ценю ваш вклад. В основном это печально сводится к требованию, которое не соответствует контексту и не обязательно. В крайнем случае я могу вручную разобрать rdf и вставить теги с помощью небольшого регулярного выражения. Ужасно, но кажется, что это невозможно. – Ash

+0

Только что понял, что это аннулирует документ rdf, я оставлю его. – Ash