library Ontology/Examples/Biblio logic OWL spec Biblio_DL_Sign = Class: Researcher DataProperty: name Class: Article ObjectProperty: author DataProperty: title ObjectProperty: hasJournal Class: Journal ObjectProperty: hasArticle DataProperty: impactFactor end spec Biblio_DL = Biblio_DL_Sign then Class: Researcher SubClassOf: name some xsd:string ObjectProperty: hasArticle InverseOf: hasJournal Class: Article SubClassOf: author some owl:Thing, title some xsd:string, hasJournal some Journal Class: Journal SubClassOf: name some xsd:string, hasArticle some owl:Thing, impactFactor some xsd:integer then %implies Class: Journal SubClassOf: hasArticle some Article end logic RelScheme spec Biblio_RS_Sign = Tables person(key id:pointer, name:string) author_of(person, paper:pointer) paper(key id:pointer,title:string,published_in:pointer) journal(key id:pointer,name:string,impact_factor:integer) end spec Biblio_RS = Biblio_RS_Sign then Relationships author_of[person] -> person[id] one_to_many author_of[paper] -> paper[id] one_to_many paper[published_in] -> journal[id] one_to_many end logic CASL spec Interface = {Biblio_RS_Sign with logic RelScheme -> CASL} and {Biblio_DL_Sign with logic -> CASL with Thing |-> pointer} then sort string, integer < DATA forall a,j,p,x:pointer;n,t:string;f:integer . journal(j,n,f) <=> Journal(j) /\ name(j,n) /\ impactFactor(j,f) . paper(a,t,j) <=> Article(a) /\ Journal(j) /\ hasArticle(j,a) /\ title(a,t) . author_of(p,a) <=> Researcher(p) /\ Article(a) /\ author(p,a) . person(p,n) <=> Researcher(p) /\ name(p,n) . Researcher(x) <=> (exists q:pointer;m:string . person(x,m) /\ author(x,q)) . Article(x) <=> (exists q:pointer;m:string . paper(x,m,q)) . Journal(x) <=> (exists m:string;i:integer . journal(x,n,i)) end