<http://example.org/1> a bf:Instance,
bf:publishedBy [ a bf:Organization ; bf:label "Hamlyn" ] ; bf:publishedAt [ a bf:Place ; bf:label "London" ] ;
bf:publishedOn "1966" .
is not preferable because it does not model the publication process right.
bf:publishedBy / bf:publishedAt / bf:publishedOn have no relationship between each other and that will become fatal, for example, if there is more than one publication in the lifecycle of the instance (e.g. reprints).
Publication is an event, I agree with Rob. The British Library is using in their model publication events, too.
Such type of events can be recorded using event attribute lists, by a simple bf:publication, tying the relations together, like this:
event:place place:Chicago ;
event:place place:Paris ;
place:Chicago rdfs:label "Chicago"@en .
corp:UniversityOfChicago rdfs:label "University of Chicago Press"@en .
place:Paris rdfs:label "Paris"@en .
corp:GautherVillars "Gauther-Villars"@en .
The semantics of this RDF is: "The Bibframe instance http://example.org/1 was published at Chicago by University of Chicago and also at Paris by Gauther-Villars in the year of 1955".
There is no longer the need to carry the information in "statement" sequences like in MARC , it can all be encoded into clear attribute sequences, one fact by another, for better evaluation by the machine interpreting the triples.
And it is easy to extend the domain of bf:publication to people, places, dates, corporate bodies (publishers), or even to WS84 geographic coordinates in addition to place names, for example, to pin the location on OpenStreetMap or Google Maps, wherever you want.