Re: property inference rule

See below (attached as a txt-File) one possible solution in
syntactically "pure" (but semantically extensible and embedded) RDF that
you can feed into the RDF Schema Explorer
(http://wonkituck.wi-inf.uni-essen.de/rdfs). Simply copy the file to the
multiline entry (there is one long line in, make sure that the line is
not broken from copy and paste or the output has one unneccessary
newline), then hit the "Parse"-Button and enter hasNiece(X,Y) into the
query field.

Enjoy,
	Wolfram (with some XML/RDF help from Reinhold, as usual ;)


> Nikita Ogievetsky wrote:
> 
> Does anybody know a way to express
> an inference rule that from:
> 
> <person rdf:ID="A">
>     <hasBrother>
>         <person>
>             <hasDaughter rdf:resource="#C"/>
>         </person>
>     </hasBrother>
> </person>
> 
> follows:
> 
> <person rdf:ID="A">
>     <hasNiece rdf:resource="#C">
> </person>
> 
> In other words:
> 
> {hasNiece} = {hasBrother X hasDaughter}
> 
> I had been pondering over this for some time
> and could not find an answer neither myself nor by asking some other
> people.
> 
> Thanks,
> 
> --Nikita.
<?xml version="1.0"?>

<RDF
  xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:relatives="this#">


<Property rdf:ID="hasDaugther">
        <rdfs:isDefinedAs rdf:parseType="Literal">
        hasDaugther(X,Y) :-
                P = hasDaughter, statement(X,P,Y).
        </rdfs:isDefinedAs>
</Property>

<Property rdf:ID="hasSon">
        <rdfs:isDefinedAs rdf:parseType="Literal">
        hasSon(X,Y) :-
                P = hasSon, statement(X,P,Y).
        </rdfs:isDefinedAs>
</Property>

<Property rdf:ID="hasSister">
        <rdfs:isDefinedAs rdf:parseType="Literal">
        hasSister(X,Y) :-
                P = hasSister, statement(X,P,Y).
        </rdfs:isDefinedAs>
</Property>

<Property rdf:ID="hasBrother">
        <rdfs:isDefinedAs rdf:parseType="Literal">
        hasBrother(X,Y) :-
                P = hasBrother, statement(X,P,Y).
           </rdfs:isDefinedAs>
</Property>


<Property rdf:ID="hasNice">
	<rdfs:isDefinedAs rdf:parseType="Literal">
	<![CDATA[
	hasNiece(X,Y) :- hNiece(X,Y),
		format('<person rdf:ID="~p">~n   <hasNiece rdf:resource="~p"/> ~n</person>',[X,Y]).
	hNiece(X,Y) :-
		hasBrother(X,Z), hasDaugther(Z,Y).
        hNiece(X,Y) :-
                hasSister(X,Z), hasDaugther(Z,Y).
	]]>
           </rdfs:isDefinedAs>
</Property>

<relatives:person rdf:ID="A">
    <relatives:hasBrother>
        <relatives:person>
            <relatives:hasDaughter rdf:resource="#C"/>
        </relatives:person>
    </relatives:hasBrother>
</relatives:person>
</RDF>

Received on Monday, 5 November 2001 13:50:22 UTC