@keywords is, of, a.
@prefix : <#>.

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
@prefix str: <http://www.w3.org/2000/10/swap/string#>.

<http://www.w3.org/2001/02pd/rec54> a Schema;
  copy <rec54.n3>.

@forAll C, C2, SCHEMA, X, P, V.

{
  SCHEMA a Schema; copy ?SC.
  (?SC.log:semantics
   <http://www.w3.org/2000/10/swap/util/rdfs-rules>.log:semantics
   <classDef.n3>.log:semantics
  ).log:conjunction
    log:conclusion ?F
} => { SCHEMA rdfsClosure ?F }.

{
  SCHEMA a Schema; rdfsClosure ?F.
  ?F log:includes { C a rdfs:Class }.
  C log:racine SCHEMA.
  ?F log:notIncludes {
    C rdfs:subClassOf [ rdfs:isDefinedBy SCHEMA].
  }.
} => { SCHEMA root C }.

{ SCHEMA a Schema; rdfsClosure ?F.
  ?F log:includes { P a rdf:Property. X P V }.
  P log:notEqualTo rdfs:subClassOf, rdfs:label, rdfs:isDefinedBy, log:implies.
} => { SCHEMA otherProp P }.



{ ?S a Schema; rdfsClosure ?F.
  ?F log:includes { C rdfs:label V }
} => { C rdfs:label V }.
{ ?S a Schema; rdfsClosure ?F.
  ?F log:includes { C rdfs:comment V }
} => { C rdfs:comment V }.

# direct subclasses
{ ?S a Schema; rdfsClosure ?F.
  ?F log:includes { C rdfs:subClassOf C2 };
     log:notIncludes { C rdfs:subClassOf [ rdfs:subClassOf C2 ] }.
} => { C rdfs:subClassOf C2 }.

# class tree/forest

"tree.0" log:outputString "<ul>\n".
"tree.9" log:outputString "</ul>\n".

{
  ?S root ?C.
  ("tree.1." ?C.log:uri ) str:concatenation ?K.
} => { ?C classKey ?K. }.

{
  ?C classKey ?K.
  ?C2 rdfs:subClassOf ?C.
  (?K ".5."  ?C2.log:uri ) str:concatenation ?K2.
} => { ?C2 classKey ?K2 }.

{
  ?C classKey ?K.

  ?C rdfs:label ?TXT.

  (?C.log:uri "#(.+)") str:scrape ?ID.

  (?K ".0" ) str:concatenation ?K0.
  (?K ".1.1" ) str:concatenation ?K11.
  (?K ".1.2" ) str:concatenation ?K12.
  (?K ".1.3" ) str:concatenation ?K13.
  (?K ".1.4" ) str:concatenation ?K14.
  (?K ".9" ) str:concatenation ?K9.
  ("<li><b id='" ?ID "'>" ) str:concatenation ?OUT1.
} => {
 ?C classKey ?K.
 ?K0 log:outputString "<li><b id='".
 ?K11 log:outputString ?ID.
 ?K12 log:outputString "'>".
 ?K13 log:outputString ?TXT.
 ?K14 log:outputString "</b>\n<ul>\n".
 ?K9 log:outputString "</ul>\n</li>\n".
 }.
