2009-07-10 7 views
1

Ich habe eine RDF-Datei in meinem semantischen Web-Projekt und ich verwende Rowlex für die Manipulation. ich gebraucht habe eine Person von RDF zu entfernen, so habe ichEntfernen von Personen und Eigenschaften aus RDF

<RDFDoc instance>.RemoveIndividual(new OwlThing(<individual URI>, <RDFDoc instance>)); 

Mit diesem Code hatte ich meine einzelnen gegangen, aber es ist Eigenschaften blieb. Also habe ich herausgefunden, dass ich die Eigenschaften zuerst entfernen sollte. Außerdem habe ich keinen Befehl gefunden, um alle Eigenschaften zusammen zu entfernen. Also, Question1: Gibt es eine Möglichkeit, eine Person mit all ihren Eigenschaften zu entfernen? oder kann ich alle Eigenschaften in einer Codezeile und nicht einzeln entfernen? Und wie kann ich Eigenschaften mit mehreren Werten entfernen? Zum Beispiel drei StudyLists, im Beispiel auf der Seite.

Auf der anderen Seite, wenn ich eine Immobilie zu entfernen versucht, zum Beispiel 'useSudyList' von Schülern individuell, durch diesen Code:

student.RemoveuseStudyList(student.useStudyList); 

fand ich meine RDF-Datei:

<Ontologyowl:Student rdf:about="ehsanm"> 
//other properties 
    <Ontologyowl:useStudyList> 
     <Ontologyowl:StudyList rdf:about="stdl184516"/> 
    </Ontologyowl:useStudyList> 
</Ontologyowl:Student> 

... wurde so:

<Ontologyowl:Student rdf:about="ehsanm"> 
    //other properties 

</Ontologyowl:Student> 
<Ontologyowl:StudyList rdf:about="stdl184516"/> 

So wurde die Eigenschaft hinausgeworfen. Ich habe dieses Problem nicht mit literalen Eigenschaften. Question2: Was ist das Problem?

Vielen Dank für Ihre Aufmerksamkeit und Hilfe, im Voraus.

Antwort

2

Ihre Frage hat nichts mit ROWLEX zu tun, aber es ist ein typisches Graphproblem: Wenn Sie einen Knoten löschen, wie weit kaskadieren Sie die Löschung? Wenn Sie eine Eigenschaft mit einem Literal löschen, ist der Fall einfach, da es keine Fortsetzung des Diagramms gibt. Wenn Sie eine Eigenschaft löschen, die auf einen anderen Knoten verweist, sollten Sie den Knoten löschen? Die Löschung in Ihrem Beispiel ist offensichtlich, da Ihr Diagramm weder einen Zirkelverweis noch gemeinsame Beziehungen enthält.

Stellen Sie sich die folgende Grafik vor: Sie haben 3 Personen: A (Adam), B (Bill) und ihren Vater F (Fred). Du hast eine Vaterschaftsbeziehung zwischen A - F und B - F. Du löschst die Beziehung zwischen Adam und seinem Vater. Sollten Sie den Vater-Knoten löschen und Bill in einen inkonsistenten (Waisen :) -Zustand bringen? Die Antwort hier ist "Nein". Sie löschen nur die Beziehung.

In UML-Diagrammen haben Sie die Möglichkeit, in der Aggregationsbeziehung zwischen "besitzend" und "geteilt" zu unterscheiden. Es wird in der Farbe (schwarz oder weiß) des Diamanten am Ende der Linie ausgedrückt. In relationalen Datenbanken können Sie "Cascade delete" über Fremdschlüssel definieren oder ignorieren. Sie repräsentieren das gleiche Konzept. Leider bietet RDF diese zusätzlichen Metadaten nicht über eine Eigenschaft an. Hätte RDF diese Informationen zur Verfügung, könnten wir bestimmen, wann und wie weit wir die Löschung über das Diagramm kaskadieren sollten. Aber wir nicht. Das stellt die schlechten Nachrichten in den Schatten: Sie sind alleine, Sie können die Löschung nach Ihren Wünschen implementieren.

+0

Du hast den Punkt genagelt! –

+0

Vielen Dank für diese sehr hilfreiche Antwort. Aber das hat mich zu einer anderen Frage gemacht. Ich habe das unter diesem Titel veröffentlicht: "Individuen und Eigenschaften im semantischen Web". Ich würde es sehr schätzen, wenn Sie sich das ansehen. Nochmals vielen Dank – Ehsan

3

Sie haben die Eigenschaft entfernt, es gab jedoch andere Aussagen zu <stdl184516>, die Sie nicht entfernt haben.

Hier sind die tatsächlichen Anweisungen, die Sie (Turtle-Format) haben:

<ehsanm> a Ontologyowl:Student . 
## Other statements 
<ehsanm> Ontologyowl:useStudyList <stdl184516> . 
<stdl184516> a Ontologyowl:StudyList . 

So macht es Sinn, dass die Entfernung des Ontologyowl:useStudyList Prädikat für <ehsanm> Subjekt (und die Erklärung, die sie enthält) die verbleibende verlassen würde Behauptung bezüglich des Typs <stdl184516>.

Der Grund, warum Sie dieses Problem mit Literalen nicht haben, ist, dass Sie keine Literale als Subjekte einer Anweisung haben (sie sind nur Objekte einer Anweisung). Wenn Sie also diese Anweisung entfernen, wird das Literal (und alle Referenzen darauf) entfernt. Bei Ressourcen als Objekt einer Aussage könnte es (wie in Ihrem Beispiel) zusätzliche Aussagen zu dieser Ressource geben.

RDF betrachtet Literale als disjunkt, dh sie sind alle unterschiedlich (auch wenn sie denselben Wert haben). Das Entfernen eines Prädikats in ein Literal (der "Link", wenn Sie so darüber nachdenken möchten) entfernt das Literal.

Update (um Mr. Lames Antwort hinzuzufügen): Konzept ist RDF über Kanten (Beziehungen/Prädikate) in einem Diagramm von Knoten (Ressourcen). Die Idee, einen Knoten zu löschen, steht im Gegensatz zu RDF; Es bedeutet, dass der Knoten (Ressource) eine eigene Bedeutung hat. Wenn Sie eine Ressource eingeben, indem Sie ihre rdf:type angeben, ist dies eine Anweisung node/edge/node. Der Knoten-URI wird allein als undurchsichtig betrachtet und hat keine Semantik, sondern ist ein eindeutiger Bezeichner. Aus diesem Grund erlaubt RDF keine "nackten" Knoten (ein Knoten außerhalb einer Anweisung) - sie haben keine inhärente Bedeutung.

Um die von Ehsan gestellte Frage zu erweitern, würde das Löschen eines Knotens tatsächlich alle eingehenden/ausgehenden Prädikate löschen.Dies löscht den Knoten nicht wirklich, er entfernt tatsächlich alle Anweisungen/Assertionen, die ihn referenzieren (denke an ihn als "versteckt", wenn keine Anweisungen darauf verweisen).

+0

Vielen Dank für die Beratung. Ich werde es erneut prüfen und Code hinzufügen, um zu sehen, ob es funktioniert. Danke nochmal – Ehsan