Question

J'utilise rowlex dans mon projet. J'ai une propriété attribuée à une personne dans mon dossier RDF, qui a une valeur. Par exemple, pour personne « étudiant », il y a une propriété « isMemberOf », avec une valeur d'un uri de classe « class00021 ». Ensuite, je veux ajouter une deuxième valeur à cette propriété. Par exemple, une valeur 'projet' avec 'proj000052' uri.

Le problème apparaît ici: après avoir ajouté la deuxième valeur, première valeur est jeté hors de la propriété « isMemberOf », même de son individu (étudiant) et est enregistré en tant que nouvel individu

.

Le code j'ai utilisé pour cette opération est comme ceci:

//Add a class to a student 
public void Add_Class
    (string uri_stu, string uri_class)
{        
        //Open RDF
        RdfDocument rdfDoc = new RdfDocument(@"RDF_Repository\RDF_Student.rdf");
        //Find the student
        //Student student = new Student(uri_stu, rdfDoc);
        Student student = (Student)rdfDoc.GetIndividual(uri_stu);
        //Add a class
        student.studyMemberOf = new ClassOfCourse(uri_class, rdfDoc);
        rdfDoc.ExportToRdfXml(@"RDF_Repository\RDF_Student.rdf");
}


//Add a project to a student 
public void Add_Project
    (string uri_stu, string uri_proj)
{
        //Open RDF
        RdfDocument rdfDoc = new RdfDocument(@"RDF_Repository\RDF_Student.rdf");
        //Find the student
        Student student = (Student)rdfDoc.GetIndividual(uri_stu);
        //Add a project                        
        student.studyMemberOf = new Project(uri_proj, rdfDoc);
        rdfDoc.ExportToRdfXml(@"RDF_Repository\RDF_Student.rdf");
}

Le RDF résultat est comme ceci:

<?xml version="1.0"?>
<rdf:RDF xmlns:Ontologyowl="http://www.owl-ontologies.com/Ontology1243411901.owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <Ontologyowl:Student rdf:about="stu000012">
        <Ontologyowl:studyMemberOf>
            <Ontologyowl:Project rdf:about="proj000052"/>
        </Ontologyowl:studyMemberOf>
    </Ontologyowl:Student>
    <Ontologyowl:ClassOfCourse rdf:about="class000021"/>
</rdf:RDF>

... et si nous continuons d'ajouter, la propriété précédente sera jeté. Alors, comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Pour chaque classe de l'ontologie, ROWLEX génère deux classes .NET un « plein » et une « lumière » un. Les deux classes sont générées automatiquement différenciés par convention de nommage. Si votre classe OWL est nommé « étudiant » que la classe lumière sera nommé « étudiant », aussi. La classe complète est nommé « Student_ ». Ils sont complètement interchangeables entre eux, le but pur d'avoir deux est la commodité. La classe complète contient toutes les méthodes / propriétés possibles dont vous avez besoin. La classe ne contient que la lumière les plus fréquemment utilisés. Le problème avec les classes pleines qu'ils deviennent vraiment bondés. Pour chaque propriété OWL vous obtiendrez 10 propriétés et méthodes dans votre classe .NET (!):

  • Ajouter (typesafe)
  • Ajoutez (non Typesafe)
  • Supprimer (typesafe)
  • Supprimer (non Typesafe)
  • Remplacer (typesafe)
  • Remplacer (non Typesafe)
  • Maison non array (typesafe)
  • Maison non tableau (non typé)
  • propriété Array (de typesafe)
  • propriété Array (non typé)

Si vous avez seulement 5 propriétés OWL pour satisfaire, la classe complète autogenerated .NET aura 5x10 méthodes / propriétés. Elles sont au nombre élevé de membres défaite facilement l'utilité de IntelliSense. Par conséquent généralement l'utilisation des classes légères sont recommandées.

Sur la classe la lumière, vous avez seulement la propriété non tableau mis en œuvre (sauf si les restrictions de cardinalité interdisent expressément autrement) et que la propriété appelle en interne la méthode remplacer. Dans votre cas, vous devez utiliser la classe complète.

Voici comment vous et utilisez la classe complète (je n'ai pas vérifié le code):

Student_ student = (Student_)rdfDoc.GetIndividual(uri_stu, Student.Uri, false);
student.AddstudyMemberOf(new Project(uri_proj, rdfDoc));

Autres conseils

Je ne suis pas familier avec Rowlex, mais je suppose que la question est de savoir comment vous créez votre nouveau prédicat studyMemberOf (ou non, comme il semble).

Comparaison:

student.studyMemberOf = new ClassOfCourse(uri_class, rdfDoc);

et

student.studyMemberOf = new Project(uri_proj, rdfDoc);

semble indiquer que vous assignant un nouvel individu à un seul prédicat, plutôt que d'ajouter une nouvelle déclaration avec le même prédicat (ce qui est exactement votre question - je ne sais pas comment cette réponse est utile).

En outre, sur une note stylistique, il semble que vous fusionnez vos déclarations au sujet des individus et votre ontologie (ils partagent le même espace de noms). C'est probablement pas ce que vous voulez, habituellement votre étudiant, la classe et les individus du projet seraient URIs (ou nœuds anonymes) dans un autre espace de noms. Par exemple:

<?xml version="1.0"?>
<rdf:RDF xmlns:Ontologyowl="http://www.owl-ontologies.com/Ontology1243411901.owl#"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <Ontologyowl:Student rdf:resource="http://students.uri/stu000012">
        <Ontologyowl:studyMemberOf>
            <Ontologyowl:Project rdf:resource="http://projects.uri/proj000052"/>
        </Ontologyowl:studyMemberOf>
    </Ontologyowl:Student>
    <Ontologyowl:ClassOfCourse rdf:resource="http://classes.uri/class000021"/>
</rdf:RDF>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top