Re: spira modeling

Sorry, I can't reproduce this directly from this code; you're missing
an assigned_to property declaration on Person, and the declaration of
the vocabulary.

The only way I can produce this error is if you declare Person after
Project, and add the following property to Person:

  property :assigned_to, :predicate => PM.assignedTo, :type => Project

(declaring Person first, this will get you an 'unknown constant' error
instead of the error you show).

So your problem is not self-referencing.  Try replacing any constants
you have for referencing relation classes with symbols.

A script demonstrating a self-referencing project is below.

HTH,
Ben

#!/usr/bin/env ruby1.9

require 'spira'

class PM < RDF::Vocabulary('http://example.org/pm'); end

Spira.add_repository(:default, RDF::Repository.new)

class Project
  include Spira::Resource

  type PM['Project']

  base_uri "http://example.org/example/projects"

  property :name, :predicate => PM.test_name, :type => String

  property :parent, :predicate => PM.subProjectOf, :type =>:Project
  has_many :children, :predicate => PM.subProject, :type =>:Project

end

project = Project.new
project.name = 'A new project'
project.save!

project2 = Project.new
project2.name = 'a subproject'
project2.parent = project
project2.save!

p Spira.repository(:default).size

On Fri, Sep 24, 2010 at 3:32 AM, Dominic Sisneros <dsisnero@gmail.com> wrote:
> When I try to self reference a type I get the following error:
>
> .0.8/lib/spira/resource/dsl.rb:243:in `add_accessors': Unrecognized type:
> Project (TypeError)
>
> A code example is as below
>
> class Person
>
>   include Spira::Resource
>
>   base_uri "http://example.org/example/people"
>
>   property :name, :predicate => FOAF.name, :type => String
>   property :age,  :predicate => FOAF.age,  :type => Integer
>
> end
>
> class Project
>   include Spira::Resource
>
>   type PM['Project']
>
>   base_uri "http://example.org/example/projects"
>
>   property :name, :predicate => PM.name, :type => String
>
>
>   property :parent, :predicate => PM.subProjectOf, :type =>:project
>   has_many :children, :predicate => PM.subProject, :type =>:project
>
> end
>
> bob = RDF::URI("http://example.org/people/bob").as(Person)
> bob.age  = 15
> bob.name = "Bob Smith"
> bob.save!
>
> project = Project.new
> project.name = 'A new project'
> project.assigned_to = bob
> project.save!
>
> project2 = Project.new
> project2.name = 'a subproject'
> project2.parent = project
> project2.save!
>
> Is this possible and how would I do it?
>
> thanks
>

Received on Friday, 24 September 2010 17:57:22 UTC