<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -5,6 +5,14 @@
 
 RDF::Trine::Model::RDFS - RDF Model supporting RDFS inferencing.
 
+=head1 SYNOPSIS
+
+ use RDF::Trine::Model::RDFS;
+ my $model	= RDF::Trine::Model::RDFS-&gt;new( $store );
+ $model-&gt;run_inference;
+ # ... do stuff here
+ $model-&gt;clear_inference;
+
 =head1 METHODS
 
 =over 4
@@ -23,12 +31,13 @@ our $RDFS_INFER_CONTEXT_URI	= 'http://kasei.us/code/rdf-trine/inference#rdfs';
 use constant USE_CHAINING	=&gt; 1;
 
 # RDFS RULES
+my @rules					= qw(Property domain range Subj_Resource Obj_Resource subProp_Trans subProp Class_Resource subClass subClass_Trans member Datatype);
 my %rules					= (
-								Property			=&gt; ['?s ?p ?o'												=&gt; '?p a rdf:Property'],
-								domain				=&gt; ['?p rdfs:domain ?c . ?s ?p ?o'							=&gt; '?s a ?c'],
-								range				=&gt; ['?p rdfs:range ?c . ?s ?p ?o'							=&gt; '?o a ?c'],
-								Subj_Resource		=&gt; ['?s ?p ?o'												=&gt; '?s a rdfs:Resource'],
-								Obj_Resource		=&gt; ['?s ?p ?o'												=&gt; '?o a rdfs:Resource'],
+								Property			=&gt; ['[] ?p []'												=&gt; '?p a rdf:Property'],
+								domain				=&gt; ['?p rdfs:domain ?c . ?s ?p []'							=&gt; '?s a ?c'],
+								range				=&gt; ['?p rdfs:range ?c . [] ?p ?o'							=&gt; '?o a ?c'],
+								Subj_Resource		=&gt; ['?s [] []'												=&gt; '?s a rdfs:Resource'],
+								Obj_Resource		=&gt; ['[] [] ?o . FILTER(!ISLITERAL(?o))'						=&gt; '?o a rdfs:Resource'],
 								subProp_Trans		=&gt; ['?q rdfs:subPropertyOf ?r. ?p rdfs:subPropertyOf ?q'	=&gt; '?p rdfs:subPropertyOf ?r'],
 								subProp				=&gt; ['?p rdfs:subPropertyOf ?r . ?s ?p ?o'					=&gt; '?s ?r ?o'],
 								Class_Resource		=&gt; ['?c a rdfs:Class'										=&gt; '?c rdfs:subClassOf rdfs:Resource'],
@@ -64,21 +73,28 @@ sub run_inference {
 	my $self		= shift;
 	my $context		= RDF::Trine::Node::Resource-&gt;new( $RDFS_INFER_CONTEXT_URI );
 	
-	my @rules_to_run	= keys(%rules);
+	my @rules_to_run	= @rules;
+	my $round	= 1;
 	while (1) {
+		printf(&quot;=====================&gt; [%d]\n&quot;, $round++);
 		my %next_rules;
 		my $size	= $self-&gt;count_statements;
 		foreach my $rule_name (@rules_to_run) {
+			printf(&quot;------&gt; [$rule_name]\n&quot;);
+			my $rsize	= $self-&gt;count_statements;
 			my $rule	= $rules{ $rule_name };
 			my ($body, $head)	= @$rule;
 			my $sparql	= &quot;PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt; CONSTRUCT { $head } WHERE { $body }&quot;;
 			my $query	= RDF::Query-&gt;new( $sparql );
 			my $iter	= $query-&gt;execute( $self );
 			while (my $st = $iter-&gt;next) {
-				$self-&gt;add_statement( $st, $context );
+				if ($self-&gt;count_statements( $st-&gt;nodes ) == 0) {
+					print $st-&gt;as_string . &quot;\n&quot;;
+					$self-&gt;add_statement( $st, $context );
+				}
 			}
 			if (USE_CHAINING) {
-				if ($size != $self-&gt;count_statements) {
+				if ($rsize != $self-&gt;count_statements) {
 					$next_rules{ $_ }++ foreach (@{ $chaining_rules{ $rule_name } });
 				}
 			}
@@ -87,9 +103,10 @@ sub run_inference {
 			last;
 		}
 		if (USE_CHAINING) {
+			# only run the rules that might produce new triples based on the triples we just got through adding
 			@rules_to_run	= keys %next_rules;
 		} else {
-			@rules_to_run	= keys %rules;
+			@rules_to_run	= @rules;
 		}
 	}
 }</diff>
      <filename>RDF-Trine-Model-RDFS/lib/RDF/Trine/Model/RDFS.pm</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8d8a82a98b433b946787a9cd962ea33a3765164a</id>
    </parent>
  </parents>
  <author>
    <name>Gregory Todd Williams</name>
    <email>greg@evilfunhouse.com</email>
  </author>
  <url>http://github.com/kasei/perlrdf/commit/4b9842d9e412b8df35a16844a9525cc26a2ed19e</url>
  <id>4b9842d9e412b8df35a16844a9525cc26a2ed19e</id>
  <committed-date>2008-12-16T11:53:21-08:00</committed-date>
  <authored-date>2008-12-16T11:53:21-08:00</authored-date>
  <message>- Added POD to RDF::Trine::Model::RDFS.
- Cleaned up RDF::Trine::Model::RDFS code.</message>
  <tree>60a0c162fcf43a7c006fd334a3b16f9f498f8393</tree>
  <committer>
    <name>Gregory Todd Williams</name>
    <email>greg@evilfunhouse.com</email>
  </committer>
</commit>
