Unfortunately, it looks like there's still a problem with the super/subclass
relationship even after I fixed the inconsistent property. Specifically, here's
the test code:
OntModel model =
ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RULE_INF);
FileInputStream inStream =
new FileInputStream("ontology/terrorism.xml");
model.read(inStream, null);
inStream.close();
String uriBase = model.getNsPrefixURI("");
OntClass cls = model.getOntClass(uriBase + "TerrorAttack");
System.out
.println("TerAtt: " + cls + " Super=" + cls.getSuperClass());
for (Iterator<OntClass> iter = cls.listSuperClasses(false); iter
.hasNext();) {
System.out.println("Super: " + iter.next());
}
OntClass newsEvt = model.getOntClass("NewsArticle");
System.out.println("NewsEvt is a superclass of TerrorAttack: "
+ cls.hasSuperClass(newsEvt));
Newest version of the ontology is attached. What is printed:
TerAtt: http://blsdev1.vsticorp.com/terrorism#TerrorAttack
Super=http://www.w3.org/2002/07/owl#Thing
Super: http://www.w3.org/2002/07/owl#Thing
Super: http://www.w3.org/2000/01/rdf-schema#Resource
Super: 1d20fb81:13d82ecf576:-7fec
Super: http://blsdev1.vsticorp.com/terrorism#Killing
Super: http://blsdev1.vsticorp.com/terrorism#Event
Super: 1d20fb81:13d82ecf576:-7fef
Super: 1d20fb81:13d82ecf576:-7ff8
Super: 1d20fb81:13d82ecf576:-7ff7
NewsEvt is a superclass of TerrorAttack: true
The superclass test is obviously incorrect. Not only are the NewsArticle and
TerrorAttack classes disjoint, the NewsArticle class doesn't even appear when
all the superclasses are listed. Why is the hasSuperClass() method returning
true?
-----Original Message-----
From: Dave Reynolds [mailto:[email protected]]
Sent: Tuesday, March 19, 2013 7:32 AM
To: [email protected]
Subject: Re: Super/Subclass relationships in OntModel?
On 19/03/13 00:35, Brian McBride wrote:
> On 18/03/2013 21:36, Dave Reynolds wrote:
>> On 18/03/13 21:16, Joshua TAYLOR wrote:
>>> On Mon, Mar 18, 2013 at 4:55 PM, Brian McBride
>>> <[email protected]> wrote:
>>>> On 18/03/2013 20:18, Joshua TAYLOR wrote:
>>> This spurred me to look at some of the relevant rules, and I'm kind
>>> of puzzled by them. E.g., (from owl-fb.rules, line 277):
>>>
>>> [maxRec2: (?C owl:equivalentClass max(?P, 0)), (?P rdfs:domain ?D),
>>> (?E owl:disjointWith ?D)
>>> -> (?E owl:equivalentClass ?C)]
>>
>> That's not quite the situation here however ...
> Having been wrong twice already, I'm a bit hesitant here, but I think
> this rule does explain what is going on.
As I've said, the presenting problem is at least partly caused by the illegal
use of owl:equivalentClass in the source ontology and if I remove that then the
test case (listing super classes of
#AircraftHijacking) works.
However, as I've also said, I do agree that those two rules are incorrect.
Thanks for the test case. I've recorded it as JENA-416 and applied a fix.
Dave
<!DOCTYPE rdf:RDF [
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>
<rdf:RDF xmlns="http://blsdev1.vsticorp.com/terrorism#"
xmlns:terror="http://blsdev1.vsticorp.com/terrorism#" xml:base="http://blsdev1.vsticorp.com/terrorism#"
xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
<owl:Ontology rdf:about="Terrorism">
<rdfs:comment>Terrorism Ontology for Battlespace Luminary
System</rdfs:comment>
<rdfs:label>Terrorism Ontology</rdfs:label>
</owl:Ontology>
<owl:Class rdf:ID="Person">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#locatedIn" />
<owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">1
</owl:maxCardinality>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="AnonPeople">
<rdfs:subClassOf rdf:resource="#Person" />
</owl:Class>
<owl:Class rdf:ID="Terrorist">
<rdfs:subClassOf rdf:resource="#Person" />
</owl:Class>
<owl:Class rdf:ID="Politician">
<rdfs:subClassOf rdf:resource="#Person" />
</owl:Class>
<owl:Class rdf:ID="Organization">
<owl:disjointWith rdf:resource="#Person" />
</owl:Class>
<owl:Class rdf:ID="Location">
<owl:disjointWith rdf:resource="#Person" />
<owl:disjointWith rdf:resource="#Organization" />
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#latitude" />
<owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">1
</owl:maxCardinality>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#longitude" />
<owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">1
</owl:maxCardinality>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="Date_Time">
<owl:disjointWith rdf:resource="#Person" />
<owl:disjointWith rdf:resource="#Organization" />
<owl:disjointWith rdf:resource="#Location" />
</owl:Class>
<owl:Class rdf:ID="Event">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#eventDate" />
<owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">1
</owl:maxCardinality>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#hasLocation" />
<owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">1
</owl:maxCardinality>
</owl:Restriction>
</rdfs:subClassOf>
<owl:disjointWith rdf:resource="#Person" />
<owl:disjointWith rdf:resource="#Organization" />
<owl:disjointWith rdf:resource="#Location" />
<owl:disjointWith rdf:resource="#Date_Time" />
</owl:Class>
<owl:Class rdf:ID="Rejected">
<!-- note: class for terms that are not entities -->
<owl:disjointWith rdf:resource="#Person" />
<owl:disjointWith rdf:resource="#Organization" />
<owl:disjointWith rdf:resource="#Location" />
<owl:disjointWith rdf:resource="#Date_Time" />
<owl:disjointWith rdf:resource="#Event" />
</owl:Class>
<owl:Class rdf:ID="Company">
<rdfs:subClassOf rdf:resource="#Organization" />
</owl:Class>
<owl:Class rdf:ID="NewsOrganization">
<rdfs:subClassOf rdf:resource="#Organization" />
<owl:disjointWith rdf:resource="#Company" />
<owl:disjointWith rdf:resource="#IdeologicalGroup" />
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#hasReference" />
<owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">0
</owl:maxCardinality>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#associatedWith" />
<owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">0
</owl:maxCardinality>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="GovernmentAgency">
<rdfs:subClassOf rdf:resource="Organization" />
<owl:disjointWith rdf:resource="#Company" />
<owl:disjointWith rdf:resource="#NewsOrganization" />
</owl:Class>
<owl:Class rdf:ID="TerroristGroup">
<rdfs:subClassOf rdf:resource="#Organization" />
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#hasMember" />
<owl:allValuesFrom rdf:resource="#TerrorAgent" />
</owl:Restriction>
</rdfs:subClassOf>
<owl:disjointWith rdf:resource="#Company" />
<owl:disjointWith rdf:resource="#NewsOrganization" />
<owl:disjointWith rdf:resource="#GovernmentOrganization" />
</owl:Class>
<owl:Class rdf:ID="Agent">
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Person" />
<owl:Class rdf:about="#Organization" />
</owl:unionOf>
</owl:Class>
<owl:Class rdf:ID="TerrorAgent">
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Terrorist" />
<owl:Class rdf:about="#TerroristGroup" />
</owl:unionOf>
</owl:Class>
<owl:Class rdf:ID="Killing">
<rdfs:subClassOf rdf:resource="#Event" />
<rdfs:subClassOf>
<owl:equivalentClass>
<owl:complementOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#actor" />
<owl:hasValue rdf:resource="#NewsOrganization" />
</owl:Restriction>
</owl:complementOf>
</owl:equivalentClass>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="Riot">
<rdfs:subClassOf rdf:resource="#Killing" />
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#actor" />
<owl:allValuesFrom rdf:resource="#AnonPeople" />
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="TerrorAttack">
<rdfs:subClassOf rdf:resource="#Killing" />
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#actor" />
<owl:allValuesFrom rdf:resource="#TerrorAgent" />
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="SuicideBombing">
<rdfs:subClassOf rdf:resource="#PlantedExplosive" />
<owl:equivalentClass>
<owl:Restriction>
<owl:onProperty rdf:resource="#isSuicide"/>
<owl:hasValue rdf:datatype="&xsd;boolean">true</owl:hasValue>
</owl:Restriction>
</owl:equivalentClass>
</owl:Class>
<owl:Class rdf:ID="CarBombing">
<rdfs:subClassOf rdf:resource="#TerrorAttack" />
<owl:equivalentClass>
<owl:Restriction>
<owl:onProperty rdf:resource="#weaponType"/>
<owl:hasValue rdf:datatype="&xsd;token">Vehicular Bomb</owl:hasValue>
</owl:Restriction>
</owl:equivalentClass>
</owl:Class>
<owl:Class rdf:ID="SuicideCarBombing">
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#CarBombing" />
<owl:Class rdf:about="#SuicideBombing" />
</owl:intersectionOf>
</owl:Class>
<owl:Class rdf:ID="AircraftHijacking">
<rdfs:subClassOf rdf:resource="#TerrorAttack" />
</owl:Class>
<owl:Class rdf:ID="PlantedExplosive">
<rdfs:subClassOf rdf:resource="#TerrorAttack" />
</owl:Class>
<owl:Class rdf:ID="MilitaryEvent">
<rdfs:subClassOf rdf:resource="#Event" />
<owl:disjointWith rdf:resource="#Riot" />
</owl:Class>
<owl:Class rdf:ID="MilitaryAttack">
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#MilitaryEvent" />
<owl:Class rdf:about="#Killing" />
</owl:intersectionOf>
<owl:disjointWith rdf:resource="#TerrorAttack" />
</owl:Class>
<owl:Class rdf:ID="TravelEvent">
<rdfs:subClassOf rdf:resource="#Event" />
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#actor" />
<owl:allValuesFrom rdf:resource="#Person" />
</owl:Restriction>
</rdfs:subClassOf>
<owl:disjointWith rdf:resource="#Killing" />
<owl:disjointWith rdf:resource="#MilitaryAttack" />
</owl:Class>
<owl:Class rdf:ID="Firefight">
<rdfs:subClassOf rdf:resource="#Event" />
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty rdf:resource="#actor" />
<owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">2
</owl:minCardinality>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="PoliticalEvent">
<rdfs:subClassOf rdf:resource="#Event" />
<owl:disjointWith rdf:resource="#Killing" />
<owl:disjointWith rdf:resource="#MilitaryEvent" />
<owl:disjointWith rdf:resource="#TravelEvent" />
</owl:Class>
<owl:Class rdf:ID="Election">
<rdfs:subClassOf rdf:resource="#PoliticalEvent" />
</owl:Class>
<owl:Class rdf:ID="NewsArticle">
<rdfs:subClassOf rdf:resource="#Event" />
<owl:disjointWith rdf:resource="#Killing" />
<owl:disjointWith rdf:resource="#PoliticalEvent" />
<owl:disjointWith rdf:resource="#MilitaryEvent" />
<owl:disjointWith rdf:resource="#TravelEvent" />
</owl:Class>
<owl:Class rdf:ID="NewsTopic">
<owl:disjointWith rdf:resource="#Person" />
<owl:disjointWith rdf:resource="#Organization" />
<owl:disjointWith rdf:resource="#Location" />
<owl:disjointWith rdf:resource="#Date_Time" />
<owl:disjointWith rdf:resource="#Event" />
<owl:disjointWith rdf:resource="#Rejected" />
</owl:Class>
<owl:Class rdf:ID="City">
<rdfs:subClassOf rdf:resource="#Location" />
</owl:Class>
<owl:Class rdf:ID="Province">
<rdfs:subClassOf rdf:resource="#Location" />
<owl:disjointWith rdf:resource="#City" />
</owl:Class>
<owl:Class rdf:ID="Country">
<rdfs:subClassOf rdf:resource="#Location" />
<owl:disjointWith rdf:resource="#City" />
<owl:disjointWith rdf:resource="#Province" />
</owl:Class>
<owl:Class rdf:ID="NonCountry">
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="#City" />
<owl:Class rdf:about="#Province" />
</owl:unionOf>
</owl:Class>
<owl:Class rdf:ID="Disambiguation_pages" />
<owl:TransitiveProperty rdf:ID="containedIn">
<rdfs:domain rdf:resource="#NonCountry"/>
<rdfs:range rdf:resource="#Location"/>
</owl:TransitiveProperty>
<owl:DatatypeProperty rdf:ID="population">
<rdfs:domain rdf:resource="#Location"/>
<rdfs:range rdf:resource="&xsd;nonNegativeInteger" />
</owl:DatatypeProperty>
<owl:ObjectProperty rdf:ID="inCountry">
<rdfs:subPropertyOf rdf:resource="#containedIn"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty" />
<rdfs:range rdf:resource="#Country"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="hasMember">
<rdfs:domain rdf:resource="#Organization" />
<rdfs:range rdf:resource="#Agent" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="isMemberOf">
<rdfs:domain rdf:resource="#Person" />
<rdfs:range rdf:resource="#Organization" />
<rdfs:subPropertyOf rdf:resource="#associatedWith" />
<owl:inverseOf rdf:resource="#hasMember" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="isPartOf">
<rdfs:domain rdf:resource="#Organization" />
<rdfs:range rdf:resource="#Organization" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="actor">
<rdfs:domain rdf:resource="#Event" />
<rdfs:range rdf:resource="#Agent" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="victim">
<rdfs:domain rdf:resource="#Killing" />
<rdfs:range rdf:resource="#Person" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="responsibleFor">
<rdfs:domain rdf:resource="#Agent" />
<rdfs:range rdf:resource="#Event" />
<owl:inverseOf rdf:resource="#actor" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="relatedEvent">
<rdfs:domain rdf:resource="#Event" />
<rdfs:range rdf:resource="#Event" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="hasLocation">
<rdfs:domain rdf:resource="#Event" />
<rdfs:range rdf:resource="#Location" />
</owl:ObjectProperty>
<!-- owl:ObjectProperty rdf:ID="dwellsIn">
<rdfs:domain rdf:resource="#Person" />
<rdfs:range rdf:resource="#Location" />
</owl:ObjectProperty -->
<owl:ObjectProperty rdf:ID="destination">
<rdf:type rdf:resource="&owl;FunctionalProperty" />
<rdfs:subPropertyOf rdf:resource="#hasLocation"/>
<rdfs:domain rdf:resource="#TravelEvent" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="locatedIn">
<rdfs:domain rdf:resource="#Agent" />
<rdfs:range rdf:resource="#Location" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="isNearTo">
<rdfs:domain rdf:resource="#Location" />
<rdfs:range rdf:resource="#Location" />
</owl:ObjectProperty>
<owl:SymmetricProperty rdf:ID="associatedWith">
<rdfs:domain rdf:resource="#Agent" />
<rdfs:range rdf:resource="#Agent" />
</owl:SymmetricProperty>
<owl:SymmetricProperty rdf:ID="alliedWith">
<rdfs:subPropertyOf rdf:resource="#identifierProperty"/>
<rdfs:domain rdf:resource="#Organization" />
<rdfs:range rdf:resource="#Organization" />
</owl:SymmetricProperty>
<owl:ObjectProperty rdf:ID="reportedBy">
<rdfs:domain rdf:resource="#Event" />
<rdfs:range rdf:resource="#NewsOrganization" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="regionOfInfluence">
<rdfs:domain rdf:resource="#IdeologicalGroup" />
<rdfs:range rdf:resource="#Location" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="forCountry">
<rdfs:domain rdf:resource="#Politician" />
<rdfs:range rdf:resource="#Country" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="eventDate">
<rdfs:domain rdf:resource="#Event" />
<rdfs:range rdf:resource="#Date_Time" />
</owl:ObjectProperty>
<owl:DatatypeProperty rdf:ID="numberKilled">
<rdfs:domain rdf:resource="#Killing" />
<rdfs:range rdf:resource="&xsd;nonNegativeInteger" />
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="numberInjured">
<rdfs:domain rdf:resource="#Killing" />
<rdfs:range rdf:resource="&xsd;nonNegativeInteger" />
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="dateValue">
<rdfs:domain rdf:resource="#Date_Time" />
<rdf:range rdf:resource="&xsd;dateTime" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="hasReference">
<rdfs:range rdf:resource="&xsd;anyURI" />
<!-- rdfs:domain rdf:resource="#Event" / -->
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="hasDescription">
<rdf:range rdf:resource="&xsd;string" />
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="personCount">
<rdfs:domain rdf:resource="#AnonPeople" />
<rdfs:range rdf:resource="&xsd;nonNegativeInteger" />
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="latitude">
<rdfs:domain rdf:resource="#Location" />
<rdfs:range rdf:resource="&xsd;double" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="longitude">
<rdfs:domain rdf:resource="#Location" />
<rdfs:range rdf:resource="&xsd;double" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="groupIdeology">
<rdfs:domain rdf:resource="#IdeologicalGroup" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="hasStatus">
<rdfs:domain rdf:resource="#Agent" />
<rdfs:range rdf:resource="&xsd;token" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="hasTitle">
<rdfs:domain rdf:resource="#Politician" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="identifierProperty">
<rdfs:domain rdf:resource="#Person" />
<rdfs:range rdf:resource="&xsd;token" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="phoneNum">
<rdfs:subPropertyOf rdf:resource="#identifierProperty"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="email">
<rdfs:subPropertyOf rdf:resource="#identifierProperty"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="twitterId">
<rdfs:subPropertyOf rdf:resource="#identifierProperty"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="eventType">
<rdfs:domain rdf:resource="#Event" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="weaponType">
<rdfs:domain rdf:resource="#Killing" />
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="isSuicide">
<rdfs:domain rdf:resource="#TerrorAttack" />
<rdfs:range rdf:resource="&xsd;boolean" />
</owl:DatatypeProperty>
<owl:ObjectProperty rdf:ID="personsInBody">
<rdfs:domain rdf:resource="#NewsArticle" />
<rdfs:range rdf:resource="#Person" />
</owl:ObjectProperty>
<owl:DatatypeProperty rdf:ID="articleKey">
<rdfs:domain rdf:resource="#NewsArticle" />
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#InverseFunctionalProperty" />
<rdfs:range rdf:resource="&xsd;token" />
</owl:DatatypeProperty>
<owl:ObjectProperty rdf:ID="organizationsInBody">
<rdfs:domain rdf:resource="#NewsArticle" />
<rdfs:range rdf:resource="#Organization" />
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="locationsInBody">
<rdfs:domain rdf:resource="#NewsArticle" />
<rdfs:range rdf:resource="#Location" />
</owl:ObjectProperty>
<owl:DatatypeProperty rdf:ID="originalFile">
<rdfs:domain rdf:resource="#NewsArticle" />
</owl:DatatypeProperty>
<owl:ObjectProperty rdf:ID="hasTopic">
<rdfs:domain rdf:resource="#NewsArticle" />
<rdfs:range rdf:resource="#NewsTopic" />
</owl:ObjectProperty>
<!-- Terms that should not be recognized as entities -->
<Rejected rdf:ID="North" />
<Rejected rdf:ID="East" />
<Rejected rdf:ID="West" />
<Rejected rdf:ID="South" />
<Rejected rdf:ID="House" />
<Rejected rdf:ID="Lower" />
<Rejected rdf:ID="Upper" />
<Rejected rdf:ID="University" />
<Rejected rdf:ID="Now" />
</rdf:RDF>