[Developers] Question about the backend software and data

Shawn Simister narphorium at gmail.com
Fri Oct 5 23:44:48 UTC 2007


Maybe I'm misunderstanding how an OWL reasoner would interpret these 
assertions but to me there seems to be a significant difference in the 
way this ontology models the data and the way that it is represented in 
Freebase. For example, in Freebase a Person object can have one or no 
place_of_birth properties and that property must be of the type 
Location. In the ontology that you have proposed I would interpret that 
same relationship as: a Person can have any number of place_of_birth 
properties as long as one of them is of type Location. I don't think 
that these two definitions are compatible.

Shawn

Kavitha Srinivas wrote:
> Yes it does!
> Kavitha
>
> On Oct 5, 2007, at 11:59 AM, Shawn Simister wrote:
>
>> So just to clarify what you are suggesting. Does this refactored 
>> person ontology illustrate the changes that you have described below?
>>
>> Kavitha Srinivas wrote:
>>> Hi Shawn
>>>    I don't think I was clear about what I was proposing in my 
>>> previous message.  Here's what I was saying:
>>>
>>> 1.  Avoid functional properties and cardinality restrictions 
>>> (cardinality restrictions are a generalized form of functional 
>>> properties), unless you want to be able to make the sorts of 
>>> inferences I described earlier.
>>> 2.  I was proposing removing the domain/range restrictions because 
>>> they are global restrictions (precisely for the reasons you 
>>> describe, that is, many types may share the same property, so domain 
>>> and range applied globally is inappropriate).  Instead, I was 
>>> suggesting modeling the same link between properties and types as 
>>> existential restrictions.
>>>
>>> Concretely as an example from your people.owl file, we have a type 
>>> of modeling [A]:
>>>
>>>    <owl:ObjectProperty rdf:ID="place_of_birth">
>>>       <rdfs:domain rdf:resource="#Person"/>
>>>       <rdfs:range 
>>> rdf:resource="http://www.freebase.com/owl/location#Location"/>
>>>       <rdf:type rdf:resource="&owl;FunctionalProperty"/>
>>>     </owl:ObjectProperty>
>>>     <owl:ObjectProperty rdf:ID="nationality">
>>>       <rdfs:domain rdf:resource="#Person"/>
>>>       <rdfs:range 
>>> rdf:resource="http://www.freebase.com/owl/location#Country"/>
>>>     </owl:ObjectProperty>
>>>
>>> What I am proposing is an alternative type of modeling [B]:
>>>     Person is a subclass of \exists.place_of_birth{Location} AND 
>>> \exists.nationality{Country}
>>>
>>> Logically, [B] is saying that if you are a person, you must have a 
>>> place of birth property that has a type of Location and nationality 
>>> property that has a type of Country (although the specific instance 
>>> may not actually be specified in the data).  Using local constraints 
>>> like those in [B], one can avoid the problem in [A] of specifying 
>>> the constraints globally.  As you noted, [A] poses a problem when 
>>> several types share the same property.  This is why a lot of life 
>>> sciences OWL models choose [B].  Note, that [B] could be 
>>> automatically generated from freebase, just the same way you are 
>>> generating [A].  Your point about automatically generating models 
>>> from Freebase is well taken.  I agree with that completely.
>>>
>>> Kavitha
>>>
>>>
>>> On Oct 5, 2007, at 1:36 AM, Shawn Simister wrote:
>>>
>>>> Thanks for the feedback. I can see what you mean about the 
>>>> functional properties so I'll switch those over to cardinality 
>>>> restrictions. With respect to placing existential restrictions on 
>>>> certain properties, I don't think that that will be feasible for a 
>>>> couple of reasons.
>>>>
>>>> First of all, I'm not aware of any such restrictions in the 
>>>> Freebase type system (although it might be nice to have them), so 
>>>> if I were to add these sorts of restrictions to ontologies there 
>>>> would be no guarantee that future RDF dumps of the Freebase data 
>>>> would actually conform to those ontologies.
>>>>
>>>> Secondly, due to the fact that there are no explicit existential 
>>>> restrictions on any of the Freebase properties I would have to 
>>>> enter these restrictions by hand which is not easy given the 
>>>> growing number of types within Freebase. Even if someone where to 
>>>> model all these restrictions by hand, maintaining them over time as 
>>>> the types change would be a challenge.
>>>>
>>>> One other issue that I have just noticed is that some domains have 
>>>> multiple types which have properties with the same names. For 
>>>> example, In the /measurement_unit domain, both DatedInteger and 
>>>> CountAsOfDate have a property named number. This causes a naming 
>>>> collision in some of the OWL ontologies. My first instinct was to 
>>>> simply merge the two properties into a single property which shares 
>>>> the domains and ranges of both properties.  The down side to this 
>>>> is that we would be making a naive assumption about the similarity 
>>>> of the properties being merged.
>>>>
>>>> An alternate approach would be to model each Freebase type as a 
>>>> separate OWL file so that each type has a unique URI. I think that 
>>>> this approach is probably safer in the long run but I'd appreciate 
>>>> any input on what people think is a better design.
>>>>
>>>> Shawn
>>>>
>>>> Kavitha Srinivas wrote:
>>>>> Shawn
>>>>>   This is really very good.  I had a couple of suggestions:
>>>>> (a) Avoid usage of functional properties for integrity constraints 
>>>>> and use them instead for when you'd like to discover something.  
>>>>> For instance, let's assume that you marriedTo is a functional 
>>>>> property, so that if the same person A is married to two people B 
>>>>> and C then
>>>>> you want to infer B and C are the same person.
>>>>> (b) Another pattern you've used is to model domain and ranges for 
>>>>> all properties of a Person (e.g., Place of Birth, etc).  This is 
>>>>> fine, but I don't know if you want to capture the fact that any 
>>>>> Person always has a Place of Birth (but we may not necessarily 
>>>>> know what that place might be).  That is, Person can be modeled as 
>>>>> an existential restriction (exists.PlaceOfBirth{Location}).  This 
>>>>> latter form of modeling is a commonly adopted pattern in many 
>>>>> large life sciences ontologies.
>>>>>
>>>>> Kavitha
>>>>>
>>>>> On Oct 3, 2007, at 5:40 AM, Shawn Simister wrote:
>>>>>
>>>>>> I've just put together a first attempt at representing the 
>>>>>> Freebase type system as OWL ontologies. There's still some work 
>>>>>> to be done but I figured I'd give you guys an update and 
>>>>>> hopefully get some feedback on how I'm modeling these domains in 
>>>>>> OWL.
>>>>>>
>>>>>> You can download it at 
>>>>>> http://www.simister.ca/temp/freebase-owl-03-10-07.zip. The way 
>>>>>> that it's set up right now is one OWL ontology per file per 
>>>>>> Freebase domain. Let me know what you think.
>>>>>>
>>>>>> Shawn
>>>>>>
>>>>>> Kavitha Srinivas wrote:
>>>>>>> Not really, am in interested in modeling issues rather than a 
>>>>>>> specific domain.  Thanks!
>>>>>>> Kavitha
>>>>>>>
>>>>>>> On Sep 30, 2007, at 4:24 PM, Shawn Simister wrote:
>>>>>>>
>>>>>>>> I'm just putting together a new version of the ontology now 
>>>>>>>> which I will make available on my website. Is there a 
>>>>>>>> particular domain that you want to see? Right now I'm just 
>>>>>>>> focusing on the 67 or so main Freebase domains.
>>>>>>>>
>>>>>>>> Shawn
>>>>>>>>
>>>>>>>> Kavitha Srinivas wrote:
>>>>>>>>> Is Shawn's OWL ontology available somewhere?
>>>>>>>>> Kavitha
>>>>>>>>>
>>>>>>>>> On Sep 28, 2007, at 9:52 PM, John Giannandrea wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Kirrily Robert wrote:
>>>>>>>>>>
>>>>>>>>>>> To me, RDF sounds like it meets those criteria.
>>>>>>>>>>>
>>>>>>>>>> I agree that an RDF dump of the data makes sense.
>>>>>>>>>> There are important details though, like how to represent
>>>>>>>>>> the schema.  Shawn Simister previously posted about
>>>>>>>>>> creating an OWL ontology from the freebase types, rather
>>>>>>>>>> than using RDF Schema, which seemed sensible.
>>>>>>>>>>
>>>>>>>>>> The key point was that Shawn was able to extract the data
>>>>>>>>>> and turn it into those formats, using HTTP, MQL and JSON.
>>>>>>>>>>
>>>>>>>>>> -jg
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Developers mailing list
>>>>>>>>>> Developers at freebase.com
>>>>>>>>>> http://lists.freebase.com/mailman/listinfo/developers
>>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Developers mailing list
>>>>>>>>> Developers at freebase.com
>>>>>>>>> http://lists.freebase.com/mailman/listinfo/developers
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>> <?xml version="1.0" encoding="ISO-8859-1"?>
>> <!DOCTYPE rdf:RDF [
>>   <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
>>   <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
>>   <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
>>   <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
>> ]>
>> <rdf:RDF
>>     xmlns="http://www.freebase.com/owl/people/person#"
>>     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="" />
>>     <owl:Class rdf:ID="Person">
>>       <rdfs:subClassOf 
>> rdf:resource="http://www.freebase.com/owl/common/topic#Topic" />
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#date_of_birth" />
>>           <owl:someValuesFrom rdf:resource="&xsd;dateTime" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#place_of_birth" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/location/location#Location" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#nationality" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/location/country#Country" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#religion" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/religion/religion#Religion" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#gender" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/people/gender#Gender" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#metaweb_user_s" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/freebase/user_profile#UserProfile" 
>> />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#parents" />
>>           <owl:someValuesFrom rdf:resource="#Person" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#children" />
>>           <owl:someValuesFrom rdf:resource="#Person" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#employment_history" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/business/employment_tenure#EmploymentTenure" 
>> />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#signature" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/common/image#Image" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#spouse_s" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/people/marriage#Marriage" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#sibling_s" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/people/sibling_relationship#SiblingRelationship" 
>> />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#weight_kg" />
>>           <owl:someValuesFrom rdf:resource="&xsd;float" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#height_meters" />
>>           <owl:someValuesFrom rdf:resource="&xsd;float" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#education" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/education/education#Education" 
>> />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#profession" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/people/profession#Profession" 
>> />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#quotations" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/media_common#Quotation" />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>       <rdfs:subClassOf>
>>         <owl:Restriction>
>>           <owl:onProperty rdf:resource="#places_lived" />
>>           <owl:someValuesFrom 
>> rdf:resource="http://www.freebase.com/owl/people/place_lived#PlaceLived" 
>> />
>>         </owl:Restriction>
>>       </rdfs:subClassOf>
>>     </owl:Class>
>>
>>     <owl:DatatypeProperty rdf:ID="date_of_birth"/>
>>     <owl:ObjectProperty rdf:ID="place_of_birth" />
>>     <owl:ObjectProperty rdf:ID="nationality" />
>>     <owl:ObjectProperty rdf:ID="religion" />
>>     <owl:ObjectProperty rdf:ID="gender" />
>>     <owl:ObjectProperty rdf:ID="metaweb_user_s">
>>       <owl:inverseOf 
>> rdf:resource="http://www.freebase.com/owl/freebase/person#person" />
>>     </owl:ObjectProperty>
>>     <owl:ObjectProperty rdf:ID="parents">
>>       <owl:inverseOf rdf:resource="#children" />
>>     </owl:ObjectProperty>
>>     <owl:ObjectProperty rdf:ID="children">
>>       <owl:inverseOf rdf:resource="#parents" />
>>     </owl:ObjectProperty>
>>     <owl:ObjectProperty rdf:ID="employment_history">
>>       <owl:inverseOf 
>> rdf:resource="http://www.freebase.com/owl/business/employment_tenure#person" 
>> />
>>     </owl:ObjectProperty>
>>     <owl:ObjectProperty rdf:ID="signature" />
>>     <owl:ObjectProperty rdf:ID="spouse_s">
>>       <owl:inverseOf 
>> rdf:resource="http://www.freebase.com/owl/people/marriag#spouse" />
>>     </owl:ObjectProperty>
>>     <owl:ObjectProperty rdf:ID="sibling_s">
>>       <owl:inverseOf 
>> rdf:resource="http://www.freebase.com/owl/people/sibling_relationship#sibling" 
>> />
>>     </owl:ObjectProperty>
>>     <owl:DatatypeProperty rdf:ID="weight_kg">
>>       <rdfs:comment><![CDATA[Weight in kilograms]]></rdfs:comment>
>>     </owl:DatatypeProperty>
>>     <owl:DatatypeProperty rdf:ID="height_meters">
>>       <rdfs:comment><![CDATA[Height in meters]]></rdfs:comment>
>>     </owl:DatatypeProperty>
>>     <owl:ObjectProperty rdf:ID="education">
>>       <owl:inverseOf 
>> rdf:resource="http://www.freebase.com/owl/education#student" />
>>     </owl:ObjectProperty>
>>     <owl:ObjectProperty rdf:ID="profession">
>>       <owl:inverseOf 
>> rdf:resource="http://www.freebase.com/owl/people/profession#people_with_this_profession" 
>> />
>>     </owl:ObjectProperty>
>>     <owl:ObjectProperty rdf:ID="quotations">
>>       <owl:inverseOf 
>> rdf:resource="http://www.freebase.com/owl/media_common/quotation#author" 
>> />
>>     </owl:ObjectProperty>
>>     <owl:ObjectProperty rdf:ID="places_lived">
>>       <owl:inverseOf rdf:resource="/people/place_lived#person" />
>>     </owl:ObjectProperty>
>> </rdf:RDF>
>
>



More information about the Developers mailing list