Open azaroth42 opened 1 year ago
Definitely yes! We're mapping our internal Bibframe representations of library resources out to schema.org already and have ambitions to do the same for Linked Art in the future.
Some basic mappings to get the ball rolling:
I can't find a good mapping beyond Thing. There is a Language class, but it has no features beyond those of Thing. There's also Intangible ... but also no properties beyond Thing.
Type
might map on to schema:DefinedTerm?Currency
to schema:StructuredValue?~DefinedTerm -- I was looking for a way to have a broader
or narrower
relationship, which I can't see anywhere. Agree that it's probably the closest. inDefinedTermSet
is useful (the equivalent of skos:inScheme
) but no other Type
related notions.
There's a closer fit in terms of properties: https://schema.org/Taxon but not definition as it's explicitly about biological classification.
Is skos:narrower
somewhat aligned with schema:greater
? Although maybe schema:QualitativeValue
is too much of a reach?
I think greater is more for the relationship between siblings -- the concept of "impossible" is somehow greater than the concept of "easy", but both are narrower than "difficulty"
What about CreativeWork and isPartOf ?
Not mapping questions but...
RE: schema:isPartOf
. This works. Class definition might be a bit of a reach.
Could we use AAT page URLs for Types and then use schema:WebPage
and schema:relatedLink
and just flatten (!) all the hierarchies? Seems bad and lossy and also weird.
Yes schema:greater
is no match for the SKOS relationships. And schema:DefinedTerm
is the best match for skos:Concept
But maybe we shouldn't devote a lot of time on types/concept to begin with. I'm not sure it's straightforward in Schema.org, as some "types" have made their way to Schema.org as items in instances of schema:Enumeration
(https://schema.org/Enumeration) and these instances don't seem to be related to schema:DefinedTerm
A little late to the conversation, but I wanted to mention that we have a workflow that maps linked art to schema.org in (a roundabout way) at the Getty, both in our museum collection pages and archival research collections. But we would love a less ambiguous mapping! We would be most interested in JSON-LD -> JSON-LD mapping.
We index some fields from our linked art LOD to an ElasticSearch index then generate schema.org json from those indexed documents -- below is cribbed from our implementation of Schema.org's Python helpers.
We use the following schema types:
[
"CreativeWork",
"Photograph",
"Sculpture",
"Drawing",
"Painting",
"Manuscript",
"Book",
"Person",
"Organization",
"Place"
]
Here's some relevant parts of the code, though much of this repeats what has already been discussed above.
## add the recipe for validation
schema.add_property("name", result["primary_name"])
add_schema_field(schema, "description", "description", result)
## person login
add_schema_field(schema, "birth_place", "birthPlace", result)
add_schema_field(schema, "born", "birthDate", result)
add_schema_field(schema, "death_place", "deathPlace", result)
add_schema_field(schema, "died", "deathDate", result)
if "accession_number" in result:
identifiers.append(result["accession_number"])
if "manuscript_number" in result:
identifiers.append(result["manuscript_number"])
if "object_number" in result:
identifiers.append(result["object_number"])
identifiers = list(set(identifiers))
schema.add_property("identifier", identifiers)
add_schema_field(schema, "materials", "material", result)
add_schema_field(schema, "rights_statement_id", "license", result)
add_schema_field(schema, "dimensions", "size", result)
add_schema_field(schema, "alternate_titles", "alternate_name", result)
place.add_property("name", result["place_created"])
schema.add_property("locationCreated", place)
schema.add_property("thumbnailUrl", result["manifest"]["thumb"])
schema.add_property("creditText", credit)
schema.add_property("creator", producers)
add_schema_field(schema, "date_created", "temporal", result)
Just checked our alpha
BIBFRAME to Schema.org transformation and we're using:
<> a schema:DefinedTerm ;
schema:hasPart <> ;
schema:isPartOf <> ;
schema:sameAs <> ;
schema:name "" .
And just ignore the "expected" domain and range of hasPart / isPartOf? They expect CreativeWork, but DefinedTerm is an Intangible. That's probably the best we can do, beyond asking for another property to be added to schema.
Looks like we should refactor our implementation a little. Also logging here that the Schema.org initiative have twice decided against extending the domain of hasPart
and isPartOf
:
Should be able to round-trip data back to linked art, or understand where there are challenges.
A little bit more noodling on the Concept
hierarchy problem.
And just ignore the "expected" domain and range of hasPart / isPartOf?
Can we (ab)use composite classes so that broad Concept
instances are both schema:DefinedTerm
and schema:DefinedTermSet
? And then extend the schema:inDefinedTermSet
property with a schema:additionalType
SKOS qualification?
<http://vocab.getty.edu/aat/300033618>
a schema:DefinedTerm ;
schema:name "Painting" ;
schema:inDefinedTermSet <http://vocab.getty.edu/aat/300133025> .
<http://vocab.getty.edu/aat/300133025>
a schema:DefinedTerm, schema:DefinedTermSet ;
schema:name "Work of Art" .
schema:inDefinedTermSet
schema:additionalType "http://www.w3.org/2004/02/skos/core#narrower"^^schema:URL .
Actually schema:inDefinedTermSet
is a subclass of schema:isPartOf
... so maybe we don't need the SKOS relation?
What about ...
<http://vocab.getty.edu/aat/300033618>
a schema:DefinedTerm, schema:CreativeWork ;
schema:name "Painting" ;
schema:inDefinedTermSet <http://vocab.getty.edu/aat/> ;
schema:isPartOf <http://vocab.getty.edu/aat/300123456> .
Baseline plus...
Missing:
Baseline plus ... /type = CreativeWork (for both Visual and Linguistic)
/type = CreativeWork, DataSet
Collated the mappings as they stand here: https://deploy-preview-540--linked-art.netlify.app/cookbook/mappings/schema.org/
Noting from discussion with @krpage and @workergnome (and others) that the Schema.Org representation needs to link to the Linked Art representation (and isn't explicit in the above mapping)
Is the mapping ready to be deployed to https://linked.art/cookbook/mappings/schema/ ?
At Yale we would benefit from a mapping from linked art into schema.org to generate and embed into our LUX entity pages.
e.g. if we could transform the incoming linked art into HTML and schema.org's json-ld to be embedded within the page, when google crawls it (or other systems), the schema.org structured data would make that indexing much stronger.
This seems like a useful result for the community, not just Yale, and something we could collaborate on?