[Developers] Question about the backend software and data

Shawn Simister narphorium at gmail.com
Mon Oct 8 06:18:56 UTC 2007


To me, that doesn't sound restrictive enough. It doesn't restrict a 
property like place_of_birth from having a JobTitle value applied to it, 
nor does it prevent someone from assigning multiple, conflicting 
Location values to it. Neither of those errors would be possible in the 
Freebase type system.  I would prefer that we use universal restrictions 
(owl:allValuesFrom) instead of existential restrictions as well as 
cardinality restrictions where necessary.
I'm not trying to argue this to death, I just don't yet understand why 
anyone would need the ontology to be so loosely defined.

Kavitha Srinivas wrote:
> All an existential restriction says is that a Person has a place of 
> birth whose value is Location.  If a person is specified with no 
> actual place of birth value (e.g., that slot is not filled in 
> Freebase), its fine, because OWL reasoners operate under the open 
> world assumption (i.e., every Person has a place of birth, but it may 
> or may not be known yet).
> Kavitha
>
> On Oct 5, 2007, at 7:44 PM, Shawn Simister wrote:
>
>> 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