- From: Gregg Kellogg <gregg@kellogg-assoc.com>
- Date: Wed, 26 Jan 2011 16:13:22 -0500
- To: Gabor Ratky <gabor@secretsaucepartners.com>
- CC: "public-rdf-ruby@w3.org" <public-rdf-ruby@w3.org>
I have a fair amount of code for working with RDFS and OWL using RdfContext. I created it for a private project, which I can't share directly. I was intended to extract it into a similar Gem to make it more publicly useful. It needs to be re-wored for RDF.rb, and could make use of the rdfs gem as well, as I've repeated some of the inference steps. I found it useful to consider classes and properties as Terms. I can then provide operations on classes such as #sub_class_of and #sub_class as well as enumerate #properties for a given class. It's also use to use OWL restrictions to create cardinality rules and datatype restrictions. These also need to consider inference rules, which can be fairly difficult; I ended up making some simplifying assumptions to implement this. For Properties, enumerating #domains and #ranges, also considering inference. I also created some Ontology Serializers that made use of my Term class to generate pretty cool HTML+RDFa documentation of an Ontology, as well as Turtle/RDFXML versions. This might be better done as a separate Gem or Rails plugin/service. I made use of this to run validations over documents based on ontologies I've defined for the Connected Media Experience to ensure that they are conformant. Having this in an open-source form could make it much more generally useful. I'd be happy to work with you on an RDF.rb-based Gem to get this out in a more general way. Gregg On Jan 26, 2011, at 4:52 AM, Gabor Ratky wrote: > Hi semantic ruby peeps, > > Do you know if there was any existing gem / plugin or someone was already working on something for traversing ontologies along RDF/RDFS/OWL predicates, such as RDF::RDFS.subClassOf. I've started implementing a few and could later extract them into a separate rdf-owl or similar gem maybe with an appropriate object model (Property, Instance classes, RDF::OWL::Class#instances, #subclasses, #parent, etc.). I wouldn't want to be working on this if this functionality was already available somewhere. > > One simple example would be: > > class RDF::Graph > def subclasses(options={}) > enum_subclass(options[:class], options.key?(:deep)) > end > > def each_subclass(parent, deep=true, &block) > if block_given? > self.query(:predicate => RDF::RDFS.subClassOf, :object => parent).each_subject do |subject| > block.call(subject) > each_subclass(subject, deep, &block) if deep > end > end > enum_subclass(parent, deep) > end > > def enum_subclass(parent, deep=true) > enum_for(:each_subclass, parent, deep) > end > alias_method :enum_subclasses, :enum_subclass > end > > Any ideas? > > Cheers-- > Gabor >
Received on Wednesday, 26 January 2011 21:14:50 UTC