2

I am a geographer and a new comer in the field of ontology trying to make sense out of these two. Therefore, I have created a simple ontology, as follows:

Thing
    Feature
        Lane
        Segment(equivalent to Arc)
    Geometry
        Arc (equivalent to Segment)
        Node
            Dangling_Node
            Intersection_node

you can find the .owl file here instantiated with a very simple spatial road dataset (fig1). enter image description here

the ontology is consistent without and with instances, but when I run the reasoner, the Dangling_node instances (nodes that are connected to one link or arc) are not correctly assigned to the relevant subclass and only assigned to the Node superclass. The intersection_node (the node which is connected to more than one link) instances are correctly assigned.

I guess according to the open world assumption, the reasoner considers that the node might be 'is_extent_of' another Arc but just not mentioned here.

Do I need, or how could I have, a closure axiom for the instance? Which part of my ontology implementation is wrong?

Edited:

Equivalent to:
    Node and (is_extent_of max 1 Arc)
Subclass of (Anonymous Ancester):
    (is_extent_of only Arc) and (is_extent_of min 1 Arc)

the General Class Axiom for the Dangling_node is as follows:

Node and (is_extent_of max 1 Arc) SubClassOf Dangling_node
msc87
  • 943
  • 3
  • 17
  • 39
  • Your owl file is not accessible, unfortunately. You spell things about a bit further, though. Where are you expecting dangling_node instances to be reasoned to (i.e. what is the "relevant" subclass). – Phil Lord May 21 '15 at 13:40
  • @PhilLord: I fixed the link, please check it again. I want the node instances to be classified based on the number of arcs they are connected to. if only one arc is connected then the node is Dangling. I am wondering, if I don't specify the instance as a node object, the reasoner can still assign it to the correct subclass of node. or If i specify the instance as a node, still reasoner should be able to classify the instance to the correct subclasses. – msc87 May 22 '15 at 09:37

1 Answers1

2

the Dangling_node instances (nodes that are connected to one link or arc) are not correctly assigned

You'd need to assert what's true, and then what's not true. For instance, since Node_005 is connected to just Arc_004, you'd need to say something like this:

(1)        connectedTo(Node_005,Arc_004)

and

(2)        {Node_005} ⊑ ∀connectedTo.{Arc_004}

(1) says that the node is actually connected to the arc. (2) says that everything that the node is connected to is an element of the class {Arc_004}, that is, that the only things it's connected to is that arc. Then, you'd an axiom that says that if something is connected to at most one arc, then it's a dangling node:

(3)        (≤ connectedTo.1) ⊑ DanglingNode

(3) is a general class axiom. You can enter those in Protege, but the UI doesn't make it obvious. See this answer for more about how to create those.

Here's what this looks like in Protege (except that instead of the general class axiom (3), I just made Dangling equivalent to connectedTo exactly 1):

Class definition for Dangling

class definition for Dangling

Axioms about the Node

individual axioms for Node

Result of Reasoner (Node is Dangling)

Dangling inferred by reasoner

Community
  • 1
  • 1
Joshua Taylor
  • 84,998
  • 9
  • 154
  • 353
  • I already have the first and the last one, but to me the second one sounds like a closure I need for the instances. could you PLZ tell me how to define NO.2 ? I edited my question so that we can discuss the possible mistake. – msc87 May 25 '15 at 12:24
  • The type "connectedTo only {Arc_004}" should be explicitly defined. it can't be concluded from the assertions? somehow a mechanism counting the number of arc instances that the node is connected to... – msc87 May 25 '15 at 12:54
  • 1
    That's what makes it a closure axiom. You can look at the other assertions and find out some set of things that it's *known* to be connected to, but without "connectedTo only {Arc_004}", you have no way of knowing that it's not connected to anything else. – Joshua Taylor May 25 '15 at 12:58
  • Thanks, I see what you mean. But what I want is to have a general closure axiom just like the GCI axiom or the necessary and enough axiom, but why these axioms I am using are not doing the job?!!! – msc87 May 25 '15 at 13:56
  • @msc87 I'm not sure what you mean by "a general closure axiom". There's not really anything to generalize in the process of saying "... is connected exactly to ...". It's specific to each individual. – Joshua Taylor May 25 '15 at 14:07
  • I think your answer to my question is correct but could you think of something that does not need to be asserted for every each one of the instances? I want to avoid that as my road network is huge. – msc87 May 25 '15 at 15:02
  • @msc87 But you already have to add one axiom per connection, right? E.g., you already have to say "A -> B", "A -> C", "A ->D". How is adding one more per instance (i.e., "A -> only {B, C, D}") that much more? If you're working with a data set that already exists, you could use SPARQL to generate those axioms, I bet. – Joshua Taylor May 25 '15 at 15:10
  • Actually, the data does not exist, in fact while the data is being produced this ontology will be produced and instantiated... that's why I need to be able to logically reason part of my knowledge – msc87 May 26 '15 at 11:55