Operate Knowledge Base Dynamically with JPL

Hi. I’m using JPL to operate a knowledge base dynamically. However I cannot find any resources that tells me how to do that.

For example, I can use the following code to create a new fact and append it to KB:

Atom a = new Atom("a");
Atom b = new Atom("b");
Compound p = new Compound("parent", new Term[]{a, b});
Query q = new Query(new Compound("assertz", new Term[]{p}));

which is the Java version of the following command in swipl:

assertz(parent(a, b)).

But I cannot find a way to add the following rules to KB:

assertz((ancestor(X, Y) :- parent(X, Y))).
assertz((ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y))).

Moreover, I cannot create the following query:

?- parent(X, Y), parent(Y, Z).

which is simply answered in the terminal version of swipl.

Is there any way to achieve these purposes?

This is just a quick reply that may help. I have never used JPL with SWI-Prolog.

The source code for JPL is open source and has test cases.

Family.java contains a query example.