DCAT-AP-Schema.org
Semantic interoperability Integration Discovery Transformation
DCAT-AP to Schema.org Case Study Infobox
- Author: Philip Strömert (@StroemPhi)
- Last updated: 2025-07-17
- Mapping Type:
- Status of this case study:
Mapping DCAT-AP to Schema.org.
Summary¶
A draft meant to report work in progress concerning an exercise, carried out at the Joint Research Centre of the European Commission (Unit B.6), for mapping the relevant terms from the DCAT Application Profile for European Data Portals (DCAT-AP) to the Schema.org vocabulary.
Domain¶
domain-agnostic
Use case category¶
- Semantic interoperability (shared understanding of data across multiple systems)
- Integration (Connecting data across disparate resources)
- Transformation (translating source data into a target schema)
- Discovery (finding related data across resources)
Purpose of the mapping¶
- To identify how to create a DCAT-AP-compliant representation of Schema.org metadata, in order to enable their sharing across DCAT-AP-enabled data catalogues.
- To identify how to create a Schema.org-compliant representation of DCAT-AP metadata, in order to enhance their discoverability on the Web.
Type of mapped resources¶
Metadata about datasets.
Links to an existing mappings¶
The mappings are expressed as SPARQL construct queries against the DCAT-AP model (constructing schema.org corresponding metadata).
Tools used for creating the mapping¶
Type of mapping relations¶
- entity mappings - one to many & many-to-one
- schema mappings - instances of DCAT-AP to schema.org.
See also notes about alignment issues.
Examples (samples) of different types of mapping implementations¶
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX locn: <http://www.w3.org/ns/locn#>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX schema: <http://schema.org/>
CONSTRUCT {
?Agent
a ?schemaPerson ;
a ?schemaOrganization ;
schema:name ?name ;
# schema:?? ?AgentType ;
schema:address ?AgentAddress ;
schema:memberOf ?Affiliation ;
schema:email ?email ;
schema:url ?workplaceHomepage ;
schema:telephone ?phone
} WHERE {
OPTIONAL { ?Agent a foaf:Agent . }
OPTIONAL { ?Agent a foaf:Person BIND(schema:Person AS ?schemaPerson) . }
OPTIONAL { ?Agent a foaf:Organization BIND(schema:Organization AS ?schemaOrganization) . }
OPTIONAL { ?Agent foaf:name ?name . }
# OPTIONAL { ?Agent dct:type ?AgentType . }
OPTIONAL { ?Agent locn:address ?AgentAddress . }
OPTIONAL { ?Agent org:memberOf ?Affiliation . }
OPTIONAL { ?Agent foaf:mbox ?email . }
OPTIONAL { ?Agent foaf:workplaceHomepage ?workplaceHomepage . }
OPTIONAL { ?Agent foaf:phone ?phone . }
}