I like to define a new OWL vocabulary that describes the concept musicians. Therefore I want to define:

new:Song rdfs:type owl:Class .
new:Song new:interpretedBy new:Musicians .  
new:Musicians rdfs:type owl:Class .
foaf:Agent rdfs:subClassOf new:Musicians .

Everyone is arguing that it should be

new:Musicians rdfs:subClassOf foaf:Agent .

, but the reason for defining the other way around is that I want to use a set of currently defined instances of foaf:Person without converting it to instances of new:Musicians.

Actually what I want to say is that instances of foaf:Agent can be also instances of new:Musicians. Is the described way correctly or is there any other pattern for this?

asked 25 Nov '11, 18:55

1001's gravatar image

1001
512
accept rate: 0%


I think you may be over complicating things slightly.

foaf:Agent rdfs:subClassOf new:Musicians .

...here you claim that all agents are musicians.

new:Musicians rdfs:subClassOf foaf:Agent .

...here you claim that all musicians are agents. (To me, this seems to make more sense.)

is that I want to use a set of currently defined instances of foaf:Person without converting it to instances of new:Musicians.

You don't have to "convert" instances, but just type them twice. Type the persons that are musicians as foaf:Person and new:Musicians.

Actually what I want to say is that instances of foaf:Agent can be also instances of new:Musicians. Is the described way correctly or is there any other pattern for this?

To say that instances of foaf:Agent can also be instances of new:Musicians, you simply have to say nothing. By default, any instance can be a member of any two classes. You have to explicitly state that something can't be in two classes with something like:

foaf:Agent owl:disjointWith new:Musicians .

...so just don't say that, and you'll be fine.


Some other minor notes (some of these would be serious errors if replicated in your vocabulary):

  • Class names should be singular by convention, and for readability (new:Musician not new:Musicians)
  • It's rdf:type, not rdfs:type
  • Reusing the Music Ontology would be worth investigating
  • Looks like you intend to define the domain and range of new:interpretedBy.

In summary, (if not re-using the Music Ontology) I think you want:

new:Song rdf:type owl:Class .
new:interpretedBy rdf:type owl:ObjectProperty .
new:interpretedBy rdfs:domain new:Song .
new:interpretedBy rdfs:range new:Musician .  
new:Musician rdf:type owl:Class .
new:Musician rdfs:subClassOf foaf:Agent .
link

answered 25 Nov '11, 21:43

Signified's gravatar image

Signified ♦
23.8k1623
accept rate: 37%

2

I'd upvote this three times if I could. There's nothing to add to this answer.

(26 Nov '11, 01:56) cygri ♦ cygri's gravatar image
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "Title")
  • image?![alt text](/path/img.jpg "Title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Tags:

×99
×53
×34
×26

Asked: 25 Nov '11, 18:55

Seen: 1,304 times

Last updated: 09 Nov '12, 04:24