- From: Michael Erickson <erickson.michael@gmail.com>
- Date: Fri, 22 Jul 2011 22:46:38 -0500
- To: semantic-web@w3.org
Hello all, I've been racking my brain on a problem all day. I'm hoping that someone on the list can help - or perhaps just tell me that what I want to do can't be done. I have a portfolio of products. The portfolio contains families of products. Each family contains several actual, purchasable products. I would like to be able to assert that a document talks about the portfolio of products, and infer that it is also relevant to the individual products themselves. In other words, if a document contains generic information about the product portfolio, and I am looking for all available information about a specific product, my query returns the document. The statements below would work: # Data Model :ProductPortfolio a owl:Class . :WidgetFamily1 a owl:Class . :inPortfolio a owl:ObjectProperty . # Instance Data :WidgetPortfolio a :ProductPortfolio . :W1 a :WidgetFamily1 . :W1 :inPortfolio :WidgetPortfolio . :Doc1 dc:subject :WidgetPortfolio . SELECT ?doc WHERE { :W1 :inPortfolio ?X . ?doc dc:subject ?X . } Given the model and assertions above, the query should return :Doc1, which I can include in my search for information about :W1. Is there a way that I can accomplish the above without having to: - Assert < :W1 :inPortfolio :WidgetPortfolio > - Determine the value of :inPortfolio inside the SPARQL query (resolve ?X) It seems to me that I might be able to assert something that defines a class containing all of the Widgets (I was thinking a owl:hasValue restriction). Then, using that as the target of the dc:subject predicate, the property will flow through to each of the individual widgets. For example: :Foo a [ magic class that winds up containing :W1 and all other widgets ] . :Doc1 dc:subject :Foo . SELECT ?doc WHERE { ?doc dc:subject :W1 . } Return :Doc1 So merely asserting that Doc1 talks about the portfolio of widgets will cause it to show up in a query of a specific widget, without going through an intermediate, linking property. Unfortunately I'm just not smart/skilled enough to do this. I do have access to the following RDFS and OWL Predicates: - rdf:type - rdfs:domain - rdfs:range - rdfs:subClassOf - rdfs:subPropertyOf - owl:inverseOf - owl:sameAs - owl:TransitiveProperty - owl:hasValue - owl:someValuesFrom - owl:allValuesFrom I also recognize that "dc:subject" isn't transitive, so I would expect to have to use a different predicate of some sort or another. Any advice would be appreciated. Best regards, --mike -- Michael Erickson
Received on Saturday, 23 July 2011 15:05:46 UTC