Print

Print


Hi Nate,

On Tue, Oct 28, 2014 at 9:41 AM, Trail, Nate <[log in to unmask]> wrote:

> Rob, thanks for the reasoned response. I just want to clarify a few
> things. I do see that the vocabulary at the top level could be simplified
> with this approach, and I’m not sure there is a more elegant solution, but
> aren’t we pushing the proliferation problem onto sub-classes?
>

We are. There needs to be a distinction made at some level of the ontology
and in my view classes are the strongest contenders for the reasons
outlines already.

It also seem like we’re unavoidably allowing two ways of doing things with
> this approach as well.
>
> For notes, we’d be establishing a main class (bf:Note) to be subclassed,
> and then all notes could be expressed in two ways:
>
> <http://example.com/xyz/Work1>
>
>  bf:note [
>
>                 a bf:Note;
>
> rdf:value “this work has illustrations in color”.].
>
> OR
>
> <http://example.com/xyz/Work1>
>
> bf:note [
>
>                 a  bf: IllustrationNote
> <http://bibframe.org/vocab/illustrationNote>;
>
> rdf:value “this work has illustrations in color”. ] .
>

That's true, but clients can more easily determine what to do in that
situation as the bf:note predicate is consistent, and would have a range of
bf:Note (which allows subClasses thereof).

So if a client saw:
    _:work1 bf:note [ a xyz:SomeUnknownClassOfNote ; rdf:value "Some Value"
]

It at least knows that it must be a note of some form and what the value
is, whereas if it saw:
    _:work1 xyz:someothernote "Some Value"

or
    _:work1 xyz:someothernote [ a xyz:SomeOtherClassOfNote ... ]

there's no possibility of recovery.

It would be able to do something with
    _:work1 xyz:someothernote [ a bf:Note ... ]

by looking at the Note class, but at extra expense compared to the
knowledge that all objects of bf:note are bf:Notes or subclasses.

Another benefit of classes over relationships is that it's more resource
oriented, following linked data patterns.  There's a resource which is a
Note.  That note has a more specific type, which is modeled as a class, and
it has some content.   This allows notes to live externally to the
description of the Work, and have additional features such as a format
(text/plain vs text/html), a language, or provenance information.

We’d almost have to , since there are tons of untyped notes, and lots of
> people who don’t want to type the title, etc., so they’d use the generic
> pattern.
>

Sure, and as they would all use the same predicate for value, then I think
the generic pattern would be fine?
Also, one might add bf:label to the note to allow for untyped notes to at
least have a label/title.

Would you say always use the generic class name in the subclasses (as in
> bf:DdcClassfication) or would it be better to have bf:Ddc, and the
> classification is implied by the fact that it’s a subclass of
> bf:Classification?
>

I don't think there's a big issue either way, personally.  It's both a
subClass of bf:Classification and the predicate is bf:classification.  The
client can tell what to do with the information using a standard pattern of
Work.note.value


On relationships, you say they don’t need fixing. However, we do have a
> situation where there are scads of relationship properties already in the
> bf:vocabulary, and we’ve tried to simplify by making them sub-properties of
> more generic ones. We’re then faced with the RDA community who don’t think
> we’ve added every last relationship they want to have, so it does need
> fixing in that it needs a pattern for how to handle new or extensions to
> the existing vocabulary.
>

Or if they need fixing, then it's not the same pattern as for types -- we
don't need a Relator class that reifies a relationship, we just need
community specific relationships, and linked data gives us a very easy way
to handle them.


> Any ideas? I’m leaning toward asking users to make their own properties,
> subproperties of  bf:relatedTo or one of the more specific ones, as we do
> with MARC relators in the transformation.
>

Agreed completely.  If there are more specific relationships between
resources needed, then creating new relationships or new classes in the
communities that have the need seems like the best way to go to me.

There will always be local identifiers, local vocabularies or domain
specific ontologies.  Trying to capture the entire world's requirements in
one model is much like trying to boil the ocean :)

Best,

Rob


*From:* Bibliographic Framework Transition Initiative Forum [mailto:
> [log in to unmask]] *On Behalf Of *Robert Sanderson
> *Sent:* Monday, October 27, 2014 3:18 PM
> *To:* [log in to unmask]
> *Subject:* [BIBFRAME] [Topic] Types
>
>
>
>
> Hi Ray, all,
>
> Regarding the Titles and Types issues, I think there's another option as
> well, Type as Class. Or, if I may, Type as Type :)
>
> For example:
>
> _:x a bf:Work ;
>    bf:title _:y .
> _:y a bf:KeyTitle ;
>    rdf:value "..." .
>
>
> I believe this is desirable for the following reasons:
>
> * Type as String Value just isn't good linked data. The type should be
> uniquely distinguishable, and clearly duplicate strings could be used by
> multiple communities independently.  This includes all the *Scheme
> predicates.
>
> * Type as URI Value is better, but seems pointless when the URI could be
> more efficiently used as a class.  All of the bf:*Type predicates and
> bf:*Scheme predicates can just be rdf:type instead.
>
> * It makes it easier to express domain and range.
>
> * It's more readable in the RDF/XML serialization and makes any object
> mapping significantly easier.
>
> * It reduces the number of properties, thereby making it easier to see
> what's going on in the model.  The subclasses are there below the main
> class for when they're needed rather than cluttering up the top level.
>
> * It's easy to create new types without needing to worry about domain and
> range of properties, just by subClassing the main class.  Otherwise, if you
> want to have additional predicates associated with your new instance, the
> domain has to be the main class rather than a subClass, which is very poor
> modeling.
>
> * It simplifies many other the predicates as the main class isn't
> necessary in the predicate name, that's just the class of the object that
> the predicate is being used with.  If the predicate should have its value
> constrained then it shouldn't have Literal as its range.  For example no
> need for identifierValue, instead it can be just value.
>
> * It prevents the possible inconsistency of using a predicate that implies
> one type on its object, but the object has a different one (eg Work issn x
> ; x scheme "doi").
>
> So I think Example 2 is the closest, but a proposed Example 5:
>
> <http://example.com/xyz//Work1 <http://example.com/xyz/Work1>>
>     bf:identifier  [
>         a bf:IssnIdentifier ;
>         rdf:value "12345678" .
>     ] .
>
> Where bf:IssnIdentifier is rdfs:subClassOf bf:Identifier, which is the
> range of bf:identifier.
>
> The same pattern holds for all of the classes/predicates under
> consideration.
>
> For titles:
> <http://example.com/xyz//Work1 <http://example.com/xyz/Work1>>
>     bf:title  [
>         a bf:KeyTitle ;
>         rdf:value "Lord of the Rings" .
>     ] .
>
> For notes:
> <http://example.com/xyz//Work1 <http://example.com/xyz/Work1>>
>     bf:note  [
>         a bf:AdminHistNote ;
>         rdf:value "Administrative history note" .
>     ] .
>
> For classifications:
> <http://example.com/xyz//Work1 <http://example.com/xyz/Work1>>
>     bf:classification  [
>         a bf:DdcClassification ;
>         rdf:value "234.5" .
>     ] .
>
> For categories:
> <http://example.com/xyz//Work1 <http://example.com/xyz/Work1>>
>     bf:category  [
>         a bf:MediaCategory ;
>         rdf:value "something" .
>     ] .
>
> For shelfmarks:
> <http://example.com/xyz//Work1 <http://example.com/xyz/Work1>>
>     bf:shelfmark  [
>         a bf:DdcShelfmark ;
>         rdf:value "12345678" .
>     ] .
>
> Relators aren't needed as objects, and relationships between Works and
> Instances are just relationships and thus don't need fixing.
>
> Roles are not types, and thus Provider doesn't fit any of the patterns
> proposed.  Roles are closer to relationships, and thus providerRole should
> be dropped. If the role is printing, then Work printer Provider, just like
> Work creator Person.  If the role is associated with the Provider object,
> then it ties it exclusively to that Work so it could never be reused.
>
> And thus to answer the three questions:
>
>
>
> 1.  Please don't do this at all :)  The model should not allow multiple,
> incompatible ways to say the same thing at the same time.
> 2.  Punning properties that can be either literal or a URI break tools and
> make many things, such as JSON-LD, much harder. Please don't do that either.
>
> 3.  Good documentation, with contributions from the community accepted in
> a timely fashion, plus encouragement in the specification to be an active
> participant in the work.
>
>
>
> Hope that helps,
>
>
>
> Rob
>
>
>
> --
> Rob Sanderson
> Technology Collaboration Facilitator
> Digital Library Systems and Services
> Stanford, CA 94305
>



-- 
Rob Sanderson
Technology Collaboration Facilitator
Digital Library Systems and Services
Stanford, CA 94305