- 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