Для начала вам нужно смоделировать ребра с помощью свойств RDF, таких как:
:propose rdf:type rdf:Property;
rdfs:label "propose".
:accept rdf:type rdf:Property;
rdfs:label "accept".
Тогда вы можете использовать их для связи M (1..N):
:M1 :propose :M2.
:M2 :propose :M3.
Это примерно сформирует график RDF, представляющий диаграмму, которую вы имеете выше. Вы можете прикрепить дополнительные свойства к каждому M (1..N), как того требует ваше приложение, или вы можете смоделировать их как rdfs: объекты класса, и ваши свойства соотносят экземпляры этих классов.
Если вы еще не прочитали учебник , это неплохое место для начала, у него есть несколько примеров, которые будут выглядеть довольно близко к тому, что вы пытаетесь смоделировать. Для создания схем или онтологий создание и поддержка простого вручную в текстовом редакторе не так уж и плохо, но вы можете захотеть использовать Protege по мере роста сложности, особенно если вы хотите начать использовать OWL .
Что касается инструментов для создания приложения, лучше всего начать с API Sesame или Jena . Они предоставляют все необходимое для чтения, записи и использования RDF. Я рекомендую Sesame, я думаю, что его проще использовать, и в нем доступно больше опций базы данных. Если вы не программист на Java, есть несколько вариантов, например, rdflib для python и dotNetRdf для .Net.