Can OWL punning help in defining data properties o

2019-07-24 14:02发布

问题:

Punning (which was introduced in OWL 2 DL) allows one to give the same name (IRI) to a Class and an Object Property (see Association Example).

Can I use this way of meta-modelling to attach attributes on a relation?

For instance, the relation drives connects Person and Vehicle. I want to specify the velocity with which the Vehicle is driven, and this property belongs on drives. Punning allows me to model drives as an association class by specifying both a class and an object property named drives. I'm guessing this would allow me to have object properties that have data properties associated with them somehow.

I would like to know whether this is the correct way of going about it. Am I missing something?

回答1:

Punning (which was introduced in OWL 2 DL) allows one to give the same name (IRI) to a Class and an Object Property (see Association Example).

Can I use this way of meta-modelling to attach attributes on a relation?

As far as I can tell, you can you use the same IRI for both a class and a property, but I don't think it will really help you in the kind of meta-modelling that you're looking for.

For instance, the relation drives connects Person and Vehicle. I want to specify the velocity with which the Vehicle is driven, and this property belongs on drives. Punning allows me to model drives as an association class by specifying both a class and an object property named drives. I'm guessing this would allow me to have object properties that have data properties associated with them somehow.

Having the same IRI denote a class and a property doesn't really help here. It sounds like what you want is a reified relation. You'd want to denote this in a way like:

person42 drives driving74  
driving74 hasVehicle vehicle89  
driving74 hasVelocity 88.8

That's really the most typical way to do this. If you really want to, you can use drives to name a class, and you can make driving74 an instance of that class, which might suggest to users that there's some connection between them. That is, you could make your schema be:

drives a owl:Class  
hasVehicle rdfs:domain drives 
hasVehicle rdfs:range Vehicle   
hasVelocity rdfs:domain drives  
hasVelocity rdfs:range Velocity

drives a owl:ObjectProperty  
drives rdfs:domain Person  
drives rdfs:range drives

You can do that, and maybe it would make the connection more apparent to some users, though in my opinion, it's not really all that helpful, and might just make things more confusing.