Frage

Ich habe eine Ontologie mit vielen Einzelpersonen und nutzen Sie den Jena-Mentation, um Informationen über sie zu erhalten. Mein Ziel ist es, neue Personen auf der Grundlage der angegebenen Informationen innerhalb dieser Regeln zu erstellen und ihnen Eigenschaften zuzuweisen. Die Individuen müssen nicht benannt werden, aber sie brauchen einen Typ und müssen Teil einiger Eigenschaften sein. Im Moment kann ich anonyme Einzelpersonen erstellen (mit Hilfe eines Mailingliste Post ), aber ich kann ihnen nur einen Typ oder eine Eigenschaft geben.

Hier ist ein kleines Beispiel meines Problems; Meine Regel sieht so aus (die Ontologie und das abgeleitete Ergebnis finden Sie unten):

[test2: (? x RDF: Typ ns: test1) ->
[(? Y rdf: type ns: test2) <- makekolem (? Y, ~ x)]]

Es bedeutet, wenn ein Test1-Individuum gefunden wird, dann wird ein neuer leerer Knoten erstellt und dann wird der Typ Test2 an diesen Knoten angegeben. Es funktioniert gut, aber ich möchte diesen neuen Individuen eine Klassifizierung und einen Zeiger (Eigenschaft) zu geben? X (die Test1-Einzelpersonen).

Etwas wie folgt funktioniert nicht, da "Rückwärtsregeln nur eine Kopfklausel zulassen". Jede Klausel für seine eins funktioniert zwar voll.

[test2: (? x RDF: Typ ns: test1) ->
[(? Y rdf: type ns: test2), (? Y ns: hasklassifizierung 'test'), <- makekolem (? Y, ~ x)]]

Dies ist meine Ontologie:

generasacodicetagpre.

Dies ist das Ergebnis mit der ersten Regel (leere Knoten mit IDS-generationspflichtiger A0 und generationstechnisch sind die neuen Individuen):

generasacodicetagpre.

War es hilfreich?

Lösung

Zunächst, dass Ihre Regel nicht genau das tut, was Sie gesagt haben.

[test2: (? x RDF: Typ ns: test1) →
[(? Y rdf: type ns: test2) ← makekolem (? Y, ~ x)]]

Es bedeutet, wenn ein Test1-Individuum gefunden wird, dann wird ein neuer leerer Knoten erstellt und dann wird der Typ Test2 an diesen Knoten gegeben.

Die Regel übereinstimmt, wenn ein Instance-Nr. Es gibt nichts, was den Typ ns sagt: test2, es sei denn, Sie fragen danach. (Schreibt das gesamte Modell natürlich nach solchen Triples.)

Wenn Sie feststellen, dass diese Art von Verhalten akzeptabel ist, können Sie einfach eine Vorwärtskavungsregel verwenden, die mehrere rückwärts-Verkettungsregeln fügt, z. B.:

[test2:
(? X RDF: Typ ns: test1) →
[(? Y rdf: type ns: test2) ← Mauskolem (? Y,? X)],
[(? Y ns: Hasklassifizierung 'test') ← Mauskolem (? Y,? X)]

]

Ich denke, das ist etwas komplizierter, als es sein muss. Skolem-Objekte sind einfach Objekte, die eindeutig von einigen anderen Werten bestimmt werden, sodass Sie Mustokolem in den Voraussetzungen einer Regel sowie den Kopf der Regel verwenden können. Das bedeutet, dass Sie dies tun können:

[test2: (? x RDF: Typ ns: test1), MASTOKOLEM (? y,? x) →
(? Y rdf: type ns: test2), (? Y rdf: type ns: hasklassifizierung 'test')]

Es ist erwähnenswert, dass Mustokolem eine beliebige Anzahl von Argumenten annimmt. Es lohnt sich möglicherweise, eine Art Indikator hinzuzufügen, damit Sie nicht versehentlich das gleiche Skolem-Objekt an mehreren Orten erhalten. Z., Wenn Sie etwas wie

hätten

[(? kind rdf: type: kind), makekolem (? mutter, kind) →
(? Mutter RDF: Typ: Mutter), (? Kind: Hasmother? Mutter)]

[(? kind rdf: type: kind), makekolem (? vater, · kind) →
(? Pater RDF: Typ: Vater), (? Kind: Hasfather? Vater)]

Dann erstellen Sie eigentlich nur ein Skolem-Objekt für jedes Kind und rufen Sie die Mutter und den Vater des Kindes an, was wahrscheinlich nicht das ist, was Sie wollen. Stattdessen könnten Sie etwas tun:

[(? Kind RDF: Typ: Kind), MASTOKOLEM (? Mutter,? Kind, 'Mutter') →
(? Mutter RDF: Typ: Mutter), (? Kind: Hasmother? Mutter)]

[(? Kind RDF: Typ: Kind), MASTOKOLEM (? Vater,? Kind, 'Vater') →
(? Pater RDF: Typ: Vater), (? Kind: Hasfather? Vater)]

Da (?child, 'mother') und (?child, 'father') immer unterschiedlich sind, erhalten Sie zwei Skolem-Objekte anstelle von nur einem. Sie können in Ihrer Regel so etwas verwenden, um zu erhalten, z. B.

[test2: (? x rdf: type ns: test1), makekolem (? y,? x, 'test2') →
(? Y rdf: type ns: test2), (? Y ns: hasklassifizierung 'test')]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top