On Wed, Jul 23, 2014 at 12:59 AM, Shlomo Sanders <[log in to unmask]> wrote:
Many institutions have a local adaptation of so e big classification scheme and by your definition are weird. Don't these need to be able to function efficiently?

Some brief notes (tl; dr - Use IRI to name classification-codes.  At the very  least add Key and cardinality restrictions. )

1.  If classification codes are assigned to individuals  using unlabeled blank nodes - e.g.

[ a bf:Classification ; bf:scheme "local" ; bf:value "something" ] 
or
a cornell:LocalClassification ; bf:value "something else" ]

then there is *nothing* in the Bibframe ontology that says that a second occurrence of (e.g.) 

[ a bf:Classification ; bf:scheme "local" ; bf:value "something" ] 

refers to the same classification code.  There is also nothing that says that they are different. 

We can add such axioms - in the first case:

Class: Classification
    SubClassOf: 
        value exactly 1 xsd:string,
        scheme exactly 1 xsd:string    
    HasKey: 
        scheme, 
        value

 In the second case:

Class: cornell:LocalClassification
    SubClassOf:
        UnspecfiedClassification,

        value exactly 1 xsd:string
    HasKey: 
        value
 
In the first case,  checking for a match requires two string comparisons; in the second case only one. 

2.   If classification codes are assigned to individuals using IRIs, checking for a match may just require matching the IRI (usually an integer comparison in triplestores).  This will be the case if IRIs are synthesized  in some locally canonical fashion. 

3. The two approaches are not incompatible:  If we define 

Class: Classification
    SubClassOf: 
        value exactly 1 xsd:string,
        scheme exactly 1 xsd:string    
    HasKey: 
        scheme, 
        value

Class: LocalClassification
    EquivalentTo: 
        Classification
         and (scheme only {"cornell:local"})

Then given three "individuals"

Individual: a
    Types: 
        LocalClassification
    Facts:  
     value  "11"^^xsd:string

Individual: b
    Types: 
        Classification    
    Facts:  
     value  "11"^^xsd:string,
     scheme "cornell:local"^^xsd:string

Individual: c 
    Types: 
        LocalClassification
    Facts:  
     value  "12"^^xsd:string
    

We can infer: 

:a :scheme "cornell:local"^^xsd:string .
:c :scheme "cornell:local"^^xsd:string .
:b a :LocalClassification
:a owl:sameAs :b .
:c owl:differentFrom :a .
:c owl:differentFrom :b .

Note that this approach does not allow for classification schemes to be defined as  subclasses of other classification schemes.   


Simon