SlideShare a Scribd company logo
Center for 
Open 
Middleware 
LDP4j: A framework for the 
development of interoperable 
read-write Linked Data applications 
Miguel Esteban Gutiérrez, 
Nandana Mihindukulasooriya, 
Raúl García Castro 
Center for Open Middleware / Ontology Engineering Group 
Universidad Politécnica de Madrid, 
Spain. 
@nandanamihindu / nmihindu@fi.upm.es
Center for 
Open 
Middleware 
Agenda 
2 
• Introduction 
• Developing a read-write Linked Data application 
• LDP4j to the rescue 
• LDP4j 101 
• LDP4j in use 
• Current status 
• Future work
Center for 
Open 
Middleware 
Introduction 
chocolate 
3 
• Linked Data Platform 
• a standard protocol for read-write Linked Data 
• LDP application ‘flavors’ 
• vanilla vs. chocolate (application-specific) 
• Interoperability 
LDP Resource (LDPR) 
Non-RDF 
Source 
(LDP-NR) 
RDF Source (LDP-NR) 
LDP Container (LDPC) 
Basic Container 
Direct Container 
Indirect Container 
vanilla 
LDP Clients Data model Business logic
Center for 
Open 
Middleware 
Developing a read-write Linked Data Application 
What we have to consider 
4 
R+W LD 
Business Logic 
HTTP 
Syntax 
Routing 
Operation semantics 
Content negotiation 
Conditional requests 
• RFC 2616, 3986, 
7230-7235 
LDP 
RDF Sources 
Containers (Basic, direct, 
and indirect) 
Paging 
RDF transformation 
• LDP (and paging) 1.0 
• RDF 1.1 
• LD+JSON 
• RFC 3987, 5785, 5789, 
5988, 6585, 7240 
REST best practices 
Client-server 
Stateless 
Cacheable 
Layered system 
Uniform interface 
• Fielding, 2000; 
• Fielding & Taylor, 2002
Center for 
Open 
Middleware 
Developing a read-write Linked Data Application 
What we can use up-to-now 
Servlet 3.0 
JAX-RS 
5 
REST best practices 
HTTP 
LDP 
R+W LD 
Business Logic 
RDF Parsers/Serializers 
Third party apps and 
utilities that support LDP 
• LDP (and paging) 1.0 
• RDF 1.1 
• LD+JSON 
• RFC 3987, 5785, 5789, 
5988, 6585, 7240 
• Fielding, 2000; 
• Fielding & Taylor, 2002 
• RFC 2616, 3986, 
7230-7235 
Syntax 
and 
routing 
No 
support at 
all 
Only for 
RDF-based 
data 
access
Center for 
Open 
Middleware 
LDP4j to the rescue 
6 
• Java-based framework for the development of read-write 
Linked Data applications 
• Motto: Focus on your business logic, we will take care of the rest 
• License: Apache License, v2.0 
• Features: 
• Simplified business object handling: 
• Lifting from and lowering to an intermediate representation that can be automatically 
unmarshalled from or marshalled to RDF, respectively. 
• LDP support 
• Protocol conversation control 
• Transparent metadata management 
• REST aware 
• Transparent publication of RDF URIRefs. 
• HTTP compliant 
• The framework takes care of fulfilling the requirements prescribed by the HTTP related 
RFCs (i.e., conditional requests processing, content negotiation, entity tag 
handling,…) 
www.ldp4j.org 
contact@ldp4j.org 
https://github.com/ldp4j/ldp4j @LDP4j
Center for 
Open 
Middleware 
LDP4j 101 
High level architecture 
7 
Application API 
Application Engine 
Server Frontend Client Frontend 
R+W LD 
App. Consumer 
R+W LD 
App. Provider 
• LDP protocol handling 
• RDF transformation 
• Application management 
• Resource management 
• Endpoint management 
Server side 
HTTP 
handling 
• Templating annotations 
• Application configuration 
• Handler API 
• Handler extensibility APIs 
• Data manipulation API 
• State manipulation API 
Client side 
HTTP 
handling
Center for 
Open 
Middleware 
LDP4j 101 
Application model 
8 
Application 
Template 
Resource Endpoint 
Handler 
Session Snapshot 
publishes 
manipulates surrogateOf 
manages 
uses 
handledBy 
definesSemantics definesDeploymentPolicies 
Dataset 
exchanges 
provides
Center for 
Open 
Middleware 
LDP4j 101 
Application API 
9 
«describes» 
«annotation» 
Resource 
«describes» 
Application ResourceHandler 
Bootstrap Environment ContainerHandler 
DataSet 
Modifiable 
Deletable 
«uses» «uses» 
«produces» 
«uses» 
Individual 
Value 
Property 
Literal 
«extend» 
ContainerSnapshot 
ResourceSnapshot 
members 
«provides» «uses» 
ReadSession WriteSession 
AttachmentSnapshot 
«refersTo» 
ManagedIndividual LocalIndividual ExternalIndividual 
«represents» 
Configuration 
«uses» 
«uses» 
«annotation» 
BasicContainer 
«annotation» 
DirectContainer 
«annotation» 
IndirectContainer 
«describes» «describes» 
attachments 
«uses» 
«uses» 
«uses» 
«uses»
Center for 
Open 
Middleware 
LDP4j 101 
Execution Pipeline 
Dispatch 
request 
Preprocess 
request 
Op. Request 
Prepare 
Input data 
Op. Response 
Prepare 
response 
Create 
application session 
Dataset lowering RDF marshalling 
Execute 
business logic 
Terminate 
application session 
Enrich 
response data with 
LDP metadata 
Dataset Dataset 
Application Engine Server Frontend Client 
LDP4j 
Application 
10 
Handle resource 
lifecycle changes 
Handle endoint 
lifecycle changes 
LDP header 
generation 
Check 
LDP metadata 
consistency 
Remove LDP 
metadata 
Content 
negotiation 
handling 
Entity 
unmarshalling 
RDF lifting 
Conditional 
request 
handling 
LDP header 
analysis
Center for 
Open 
Middleware 
LDP4j 101 
Recipe for using LDP4j 
11 
1. Get LDP4j sources 
2. Build LDP4j sources 
3. Create a maven web-app project 
4. Implement your business logic 
5. Build the project 
6. Deploy onto an servlet container 
7. Enjoy!!!
Center for 
Open 
Middleware 
LDP4j 101 
Developing an application 
12 
• Create a maven web-app project: 
<?xml version="1.0" encoding="UTF-8"?> 
<project 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<!-- Module coordinates here --> 
<packaging>war</packaging> 
<properties> 
<ldp4j.version>1.0.0-SNAPSHOT</ldp4j.version> 
<!-- Other properties here --> 
</properties> 
<dependencies> 
<dependency> 
<groupId>org.ldp4j.framework</groupId> 
<artifactId>ldp4j-application-api</artifactId> 
<version>${ldp4j.version}</version> 
</dependency> 
<dependency> 
<groupId>org.ldp4j.framework</groupId> 
<artifactId>ldp4j-server-core</artifactId> 
<scope>runtime</scope> 
<version>${ldp4j.version}</version> 
</dependency> 
<!-- Other dependencies here --> 
</dependencies> 
<!-- Other build setting here --> 
</project>
Center for 
Open 
Middleware 
LDP4j 101 
Developing an application 
13 
package org.example; 
import org.ldp4j.application.data.DataSet; 
import org.ldp4j.application.ext.Deletable; 
import org.ldp4j.application.ext.ResourceHandler; 
import org.ldp4j.application.session.ResourceSnapshot; 
import org.ldp4j.application.session.WriteSession; 
public class MyDeletableResourceHandler implements ResourceHandler, Deletable { 
@Override 
public DataSet get(ResourceSnapshot resource) { 
// TODO Implement your data retrieval logic 
return null; 
} 
@Override 
public void delete(ResourceSnapshot resource, WriteSession session) { 
// TODO Implement your deletion logic 
} 
} 
• Implement your resource handlers…
Center for 
Open 
Middleware 
LDP4j 101 
Developing an application 
14 
package org.example; 
import org.ldp4j.application.data.DataSet; 
import org.ldp4j.application.ext.ContainerHandler; 
import org.ldp4j.application.ext.ContentProcessingException; 
import org.ldp4j.application.ext.Modifiable; 
import org.ldp4j.application.session.ContainerSnapshot; 
import org.ldp4j.application.session.ResourceSnapshot; 
import org.ldp4j.application.session.WriteSession; 
public class MyModifiableContainerHandler implements ContainerHandler, Modifiable { 
@Override 
public DataSet get(ResourceSnapshot resource) { 
// TODO Implement your data retrieval logic 
return null; 
} 
@Override 
public ResourceSnapshot create(ContainerSnapshot container, DataSet representation, WriteSession session) { 
// TODO Implement your creation logic here 
return null; 
} 
@Override 
public void update(ResourceSnapshot resource, DataSet content, WriteSession session) 
throws ContentProcessingException { 
// TODO Implement your modification logic here 
} 
} 
• … and container handlers:
Center for 
Open 
Middleware 
LDP4j 101 
Developing an application 
15 
package org.example; 
... 
import org.ldp4j.application.ext.annotations.BasicContainer; 
@BasicContainer( 
id = "containerTemplateId", 
memberHandler = MyDeletableResourceHandler.class 
) 
public class MyModifiableContainerHandler implements ContainerHandler, Modifiable { 
... 
} 
• Annotate the handlers: 
package org.example; 
... 
import org.ldp4j.application.ext.annotations.Resource; 
@Resource( 
id="resourceTemplateId" 
) 
public class MyDeletableResourceHandler implements ResourceHandler, Deletable { 
... 
}
Center for 
Open 
Middleware 
LDP4j 101 
Developing an application 
16 
package org.example; 
import org.ldp4j.application.data.Name; 
import org.ldp4j.application.data.NamingScheme; 
import org.ldp4j.application.ext.Application; 
import org.ldp4j.application.ext.Configuration; 
import org.ldp4j.application.session.WriteSession; 
import org.ldp4j.application.setup.Bootstrap; 
import org.ldp4j.application.setup.Environment; 
public class MyApplication extends Application<Configuration> { 
@Override 
public void setup(Environment environment, Bootstrap<Configuration> bootstrap) { 
MyModifiableContainerHandler containerHandler=new MyModifiableContainerHandler(); 
MyDeletableResourceHandler resourceHandler=new MyDeletableResourceHandler(); 
// TODO Your handler configuration logic here 
bootstrap.addHandler(resourceHandler); 
bootstrap.addHandler(containerHandler); 
Name<?> rootContainerName=NamingScheme.getDefault().name("containerName") ; 
environment.publishResource(rootContainerName, MyModifiableContainerHandler.class, "containerRootPath"); 
} 
@Override 
public void initialize(WriteSession session) { 
// TODO Your handler initialization logic here 
// Remember, the session has to be updated to reflect the state of the data managed by the handlers 
} 
@Override 
public void shutdown() { 
// TODO Your shutdown logic here 
} 
} 
• Implement your application class:
Center for 
Open 
Middleware 
LDP4j 101 
Developing an application 
17 
• Update the web application descriptor: 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
metadata-complete="false" 
version="3.0" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation=" 
http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<display-name>My LDP4j Application</display-name> 
<context-param> 
<param-name>ldp4jTargetApplication</param-name> 
<param-value>org.example.MyApplication</param-value> 
</context-param> 
<!-- Other configuration here --> 
</web-app>
Center for 
Open 
Middleware 
LDP4j in Use 
The Bugzilla adapter 
18 
• Exposes Bugzilla as an LDP-enabled application 
ALM iStack ontology 
 RDF 
 HTTP 
Headers 
LDP Clients 
Bugzilla 
LDP Adapter 
 XML-RPC 
 Native data 
model 
An example of bug creation 
POST /ita/containers/bugs HTTP/1.1 
Host: localhost 
Content-Type: text/turtle 
@prefix ai: <http://delicias.dia.fi.upm.es/ontologies/alm-istack#> . 
…rest of the namespace declarations are omitted for brevity. 
<> a ai:ClientDefect; 
dcterms:creator <http://localhost/ita/ldp/resources/users/9> ; 
dcterms:title "Bugzilla adapter build is broken"^^xsd:string; 
dcterms:description "Bugzilla adapter build fails due to a 
test failure"^^xsd:string; 
oslc_asset:relatedAsset <http://localhost/ita/ldp/resources/versions/16> ; 
ai:relatedIncident <https://bugzilla.mozilla.org/show_bug.cgi?id=730698> . 
HTTP/1.1 201 Created 
Location: http://localhost/ita/ldp/resources/bugs/12 
Link: <http://www.w3.org/ns/ldp#Resource>; rel='type' 
Content-Length: 0 
Mihindukulasooriya, N., Esteban-Gutiérrez, M., García-Castro, R.: A Linked Data 
Platform adapter for the Bugzilla issue tracker. Demo at the 13th International 
Semantic Web Conference, Riva del Garda, Italy (Oct 2014)
Center for 
Open 
Middleware 
LDP4j in Use 
morph-LDP 
19 
• Exposes relational databases as read-write Linked Data 
Database + R2RML Morph-LDP Read-write LD 
Oegmembers Table 
id fname lname 
@prefix rr: <http://www.w3.org/ns/r2rml#> . 
@prefix foaf: <http://xmlns.com/foaf/0.1/> . 
<TriplesMapPerson> 
a rr:TriplesMap; 
rr:logicalTable [ rr:tableName "oegmembers" ]; 
asun Asunción Gómez Pérez 
fpriyatna Freddy Priyatna 
mesteban Miguel Estebam 
rr:subjectMap [ a rr:Subject; rr:class foaf:Person; 
rr:template “http://example.org/oeg/members/{id}"; 
rr:termType rr:IRI; ]; 
nmihindu Nandana Mihindukulas 
ocorcho Oscar Corcho 
rr:predicateObjectMap [ 
rr:predicateMap [ rr:constant foaf:firstName ]; 
rr:objectMap [ rr:column “fname"; rr:termType rr:Literal; ]; 
]; 
rgarcia Raul Garcia Castro 
rr:predicateObjectMap [ 
rr:predicateMap [ rr:constant foaf:lastName ]; 
rr:objectMap [ rr:column “lname"; rr:termType rr:Literal; ]; 
]; 
… 
http://example.org/oeg/members/fpriyatna 
Legacy Applications 
Registration 
Office 
exposes 
morph-LDP 
Web App 
Relational 
Database 
Library 
configures 
Tabulator 
ldspider LDIF 
OpenLink Data Explorer 
Freddy 
Priyatna 
dereferences to 
GET /oeg/members/ HTTP/1.1 
Host: example.org 
Accept: text/turtle 
200 OK 
HTTP/1.1 200 OK 
Content-Type: text/turtle; charset=UTF-8 
Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" 
ETag: W/"195482449" 
@prefix dcterms: <http://purl.org/dc/terms/>. 
@prefix ldp: <http://www.w3.org/ns/ldp#>. 
<> a ldp:BasicContainer; 
dcterms:title "Members of OEG, UPM"; 
ldp:contains <http://example.org/oeg/members/asun> ; 
ldp:contains <http://example.org/oeg/members/fpriyatna> ; 
ldp:contains <http://example.org/oeg/members/mesteban>; 
ldp:contains <http://example.org/oeg/members/nmihindu>; 
ldp:contains <http://example.org/oeg/members/ocorcho> ; 
ldp:contains <http://example.org/oeg/members/rgarcia> . 
mappings 
Mihindukulasooriya, N., Priyatna, F., Corcho, O., Garcıa-Castro, R., Esteban- 
Gutiérrez, M.: morph-LDP: An R2RML-based Linked Data Platform implementation. 
Demo at the 11th Extended Semantic Web Conference, Crete, Greece (May 2014)
Center for 
Open 
Middleware 
Current status 
Supported 
LDP features 
• RDF Sources 
• Basic Containers 
• Direct Containers 
• Sever managed 
properties 
• Content preferences 
• Interaction models 
• LDP4j 1.0.0 to be released by the end of October: 
• Application API, 
• Application Engine, and 
• Server Frontend 
Unsupported 
LDP features 
• Non-RDF Sources 
• Put-to-Create 
LDP features under 
development 
• Indirect Containers 
20 
https://github.com/ldp4j/ldp4j
Center for 
Open 
Middleware 
Implementation report for LDP4j 
21 
• Results of W3C LDP test suite 
• https://dvcs.w3.org/hg/ldpwg/raw-file/default/tests/reports/ldp.html 
Feature MUST SHOULD MAY 
RDF Sources 24/24 (100.0%) 7/7 (100.0%) 1/1 (100.0%) 
Basic Containers 37/37 (100.0%) 15/17 (88.2%) 3/4 (75.0%) 
Direct Containers 42/42 (100.0%) 17/19 (89.5%) 3/4 (75.0%) 
Indirect Containers 36/39 (92.3%) 15/17 (88.2%) 3/4 (75.0%)
Center for 
Open 
Middleware 
Future work 
22 
• Support more LDP features: 
• Slug headers 
• Indirect containers 
• Paging* 
• Patch* 
• Other features beyond the LDP scope: 
• Vocabulary support 
• Content validation 
• Co-reference support 
• Transaction support 
• AAA support
Center for 
Open 
Middleware 
Questions? 
Miguel Esteban Gutiérrez, 
Nandana Mihindukulasooriya, 
Raúl García Castro

More Related Content

What's hot (20)

PPTX
Application integration with the W3C Linked Data standards
Nandana Mihindukulasooriya
 
PPTX
Scaling up Linked Data
EUCLID project
 
PDF
Approaching Join Index: Presented by Mikhail Khludnev, Grid Dynamics
Lucidworks
 
PDF
Illuminating DSpace's Linked Data Support
Pascal-Nicolas Becker
 
ODP
Slug: A Semantic Web Crawler
Leigh Dodds
 
PDF
3.7.17 DSpace for Data: issues, solutions and challenges Webinar Slides
DuraSpace
 
PDF
30° Nexa Lunch Seminar - Linked Data Platform vs real world
Diego Valerio Camarda
 
PPT
Open for Business - Open Archives, OpenURL, RSS and the Dublin Core
Andy Powell
 
PPT
Open for Business Open Archives, OpenURL, RSS and the Dublin Core
Andy Powell
 
PPTX
Odata
Monalisa Patel
 
PPTX
SWIB14 Weaving repository contents into the Semantic Web
Pascal-Nicolas Becker
 
PDF
ORCID Adoption & Integration in DSpace
ORCID, Inc
 
PPTX
Microtask Crowdsourcing Applications for Linked Data
EUCLID project
 
PPTX
Approaching Join Index - Lucene/Solr Revolution 2014
Grid Dynamics
 
PDF
(PROJEKTURA) Big Data Open Data story for TGG
Ratko Mutavdzic
 
PDF
So we all have ORCID integrations, now what?
Bram Luyten
 
PPTX
OpenAIRE and the Case of Irish Repositories
RIANIreland
 
PPT
Content analysis for ECM with Apache Tika
Paolo Mottadelli
 
PPTX
SharePoint Migrations Pitfalls from the Crypt
John Mongell
 
PPTX
System Update (2011 CrossRef Workshops)
Crossref
 
Application integration with the W3C Linked Data standards
Nandana Mihindukulasooriya
 
Scaling up Linked Data
EUCLID project
 
Approaching Join Index: Presented by Mikhail Khludnev, Grid Dynamics
Lucidworks
 
Illuminating DSpace's Linked Data Support
Pascal-Nicolas Becker
 
Slug: A Semantic Web Crawler
Leigh Dodds
 
3.7.17 DSpace for Data: issues, solutions and challenges Webinar Slides
DuraSpace
 
30° Nexa Lunch Seminar - Linked Data Platform vs real world
Diego Valerio Camarda
 
Open for Business - Open Archives, OpenURL, RSS and the Dublin Core
Andy Powell
 
Open for Business Open Archives, OpenURL, RSS and the Dublin Core
Andy Powell
 
SWIB14 Weaving repository contents into the Semantic Web
Pascal-Nicolas Becker
 
ORCID Adoption & Integration in DSpace
ORCID, Inc
 
Microtask Crowdsourcing Applications for Linked Data
EUCLID project
 
Approaching Join Index - Lucene/Solr Revolution 2014
Grid Dynamics
 
(PROJEKTURA) Big Data Open Data story for TGG
Ratko Mutavdzic
 
So we all have ORCID integrations, now what?
Bram Luyten
 
OpenAIRE and the Case of Irish Repositories
RIANIreland
 
Content analysis for ECM with Apache Tika
Paolo Mottadelli
 
SharePoint Migrations Pitfalls from the Crypt
John Mongell
 
System Update (2011 CrossRef Workshops)
Crossref
 

Similar to LDP4j: A framework for the development of interoperable read-write Linked Data applications (20)

PPTX
Best of Marketing
marketingtips02
 
PDF
Introduction to LDP in Apache Marmotta
Sergio Fernández
 
PPTX
Linked data platform adapter for bugzilla poster
Nandana Mihindukulasooriya
 
PDF
LDP-DL: A language to define the design of Linked Data Platforms
Mohammad Noorani Bakerally
 
PPTX
Linked Data Platform as a novel approach for Enterprise Application Integra...
Nandana Mihindukulasooriya
 
PPTX
JavaOne2013 Leveraging Linked Data and OSLC
Steve Speicher
 
PDF
Wed roman tut_open_datapub
eswcsummerschool
 
PPTX
morph-LDP Demo
Nandana Mihindukulasooriya
 
PPTX
ReST API's for IBMi Made Simple LXR v1.6.9
Stuart Milligan
 
PPT
Deploying RDF Linked Data via Virtuoso Universal Server
rumito
 
PDF
morph-LDP: An R2RML-based Linked Data Platform implementation
Nandana Mihindukulasooriya
 
PPT
Tutorial Linked APIs
Steffen Stadtmüller
 
PDF
Summit 16: ARM Mini-Summit - OpenDataPlane Monarch Release - Linaro
OPNFV
 
PPTX
RDF Validation in a Linked Data World - A vision beyond structural and value ...
Nandana Mihindukulasooriya
 
PDF
Perforce Web Services
Perforce
 
ODP
Incubating Apache Linda (ApacheCon Europe 2012)
Sergio Fernández
 
PPTX
LDC Via building a new app
Mark Myers
 
PDF
A high profile project with Symfony and API Platform: beIN SPORTS
Smile I.T is open
 
PDF
Reactive Microservices with Spring 5: WebFlux
Trayan Iliev
 
Best of Marketing
marketingtips02
 
Introduction to LDP in Apache Marmotta
Sergio Fernández
 
Linked data platform adapter for bugzilla poster
Nandana Mihindukulasooriya
 
LDP-DL: A language to define the design of Linked Data Platforms
Mohammad Noorani Bakerally
 
Linked Data Platform as a novel approach for Enterprise Application Integra...
Nandana Mihindukulasooriya
 
JavaOne2013 Leveraging Linked Data and OSLC
Steve Speicher
 
Wed roman tut_open_datapub
eswcsummerschool
 
ReST API's for IBMi Made Simple LXR v1.6.9
Stuart Milligan
 
Deploying RDF Linked Data via Virtuoso Universal Server
rumito
 
morph-LDP: An R2RML-based Linked Data Platform implementation
Nandana Mihindukulasooriya
 
Tutorial Linked APIs
Steffen Stadtmüller
 
Summit 16: ARM Mini-Summit - OpenDataPlane Monarch Release - Linaro
OPNFV
 
RDF Validation in a Linked Data World - A vision beyond structural and value ...
Nandana Mihindukulasooriya
 
Perforce Web Services
Perforce
 
Incubating Apache Linda (ApacheCon Europe 2012)
Sergio Fernández
 
LDC Via building a new app
Mark Myers
 
A high profile project with Symfony and API Platform: beIN SPORTS
Smile I.T is open
 
Reactive Microservices with Spring 5: WebFlux
Trayan Iliev
 
Ad

More from Nandana Mihindukulasooriya (20)

PPTX
A Framework for Linked Data Quality based on Data Profiling and RDF Shape Ind...
Nandana Mihindukulasooriya
 
PPTX
Leveraging Semantic Parsing for Relation Linking over Knowledge Bases
Nandana Mihindukulasooriya
 
PPTX
ISWC 2020 - Semantic Answer Type Prediction
Nandana Mihindukulasooriya
 
PDF
Fitur - HackaTrips 2018!
Nandana Mihindukulasooriya
 
PDF
A Distributed Transaction Model for Read-Write Linked Data Applications
Nandana Mihindukulasooriya
 
PDF
Repairing Hidden Links in Linked Data
Nandana Mihindukulasooriya
 
PPTX
Loupe API - A Linked Data Profiling Service for Quality Assessment
Nandana Mihindukulasooriya
 
PDF
Research Poster Design
Nandana Mihindukulasooriya
 
PPTX
Collaborative Ontology Evolution and Data Quality - An Empirical Analysis
Nandana Mihindukulasooriya
 
PPTX
Erasmus+ promotional event - Kandy, Sri Lanka
Nandana Mihindukulasooriya
 
PPTX
Loupe model - Use Cases and Requirements
Nandana Mihindukulasooriya
 
PPTX
4V - WP3 Progress Report (TIN2013-46238)
Nandana Mihindukulasooriya
 
PPTX
A Two-Fold Quality Assurance Approach for Dynamic Knowledge Bases : The 3cixt...
Nandana Mihindukulasooriya
 
PPTX
An analysis of the quality issues of the properties available in the Spanish ...
Nandana Mihindukulasooriya
 
PPTX
ALM iStack - Application Lifecycle Management using Linked Data
Nandana Mihindukulasooriya
 
PPTX
Erasmus Mundus - Overview, Opportunities, and Details
Nandana Mihindukulasooriya
 
PPTX
Erasmus Mundus - European higher education opportunities for Sri Lankans
Nandana Mihindukulasooriya
 
PPT
Open Source Software Licenses
Nandana Mihindukulasooriya
 
PDF
Computer Science for Fun Project
Nandana Mihindukulasooriya
 
A Framework for Linked Data Quality based on Data Profiling and RDF Shape Ind...
Nandana Mihindukulasooriya
 
Leveraging Semantic Parsing for Relation Linking over Knowledge Bases
Nandana Mihindukulasooriya
 
ISWC 2020 - Semantic Answer Type Prediction
Nandana Mihindukulasooriya
 
Fitur - HackaTrips 2018!
Nandana Mihindukulasooriya
 
A Distributed Transaction Model for Read-Write Linked Data Applications
Nandana Mihindukulasooriya
 
Repairing Hidden Links in Linked Data
Nandana Mihindukulasooriya
 
Loupe API - A Linked Data Profiling Service for Quality Assessment
Nandana Mihindukulasooriya
 
Research Poster Design
Nandana Mihindukulasooriya
 
Collaborative Ontology Evolution and Data Quality - An Empirical Analysis
Nandana Mihindukulasooriya
 
Erasmus+ promotional event - Kandy, Sri Lanka
Nandana Mihindukulasooriya
 
Loupe model - Use Cases and Requirements
Nandana Mihindukulasooriya
 
4V - WP3 Progress Report (TIN2013-46238)
Nandana Mihindukulasooriya
 
A Two-Fold Quality Assurance Approach for Dynamic Knowledge Bases : The 3cixt...
Nandana Mihindukulasooriya
 
An analysis of the quality issues of the properties available in the Spanish ...
Nandana Mihindukulasooriya
 
ALM iStack - Application Lifecycle Management using Linked Data
Nandana Mihindukulasooriya
 
Erasmus Mundus - Overview, Opportunities, and Details
Nandana Mihindukulasooriya
 
Erasmus Mundus - European higher education opportunities for Sri Lankans
Nandana Mihindukulasooriya
 
Open Source Software Licenses
Nandana Mihindukulasooriya
 
Computer Science for Fun Project
Nandana Mihindukulasooriya
 
Ad

Recently uploaded (20)

PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
Staying Human in a Machine- Accelerated World
Catalin Jora
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Staying Human in a Machine- Accelerated World
Catalin Jora
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 

LDP4j: A framework for the development of interoperable read-write Linked Data applications

  • 1. Center for Open Middleware LDP4j: A framework for the development of interoperable read-write Linked Data applications Miguel Esteban Gutiérrez, Nandana Mihindukulasooriya, Raúl García Castro Center for Open Middleware / Ontology Engineering Group Universidad Politécnica de Madrid, Spain. @nandanamihindu / [email protected]
  • 2. Center for Open Middleware Agenda 2 • Introduction • Developing a read-write Linked Data application • LDP4j to the rescue • LDP4j 101 • LDP4j in use • Current status • Future work
  • 3. Center for Open Middleware Introduction chocolate 3 • Linked Data Platform • a standard protocol for read-write Linked Data • LDP application ‘flavors’ • vanilla vs. chocolate (application-specific) • Interoperability LDP Resource (LDPR) Non-RDF Source (LDP-NR) RDF Source (LDP-NR) LDP Container (LDPC) Basic Container Direct Container Indirect Container vanilla LDP Clients Data model Business logic
  • 4. Center for Open Middleware Developing a read-write Linked Data Application What we have to consider 4 R+W LD Business Logic HTTP Syntax Routing Operation semantics Content negotiation Conditional requests • RFC 2616, 3986, 7230-7235 LDP RDF Sources Containers (Basic, direct, and indirect) Paging RDF transformation • LDP (and paging) 1.0 • RDF 1.1 • LD+JSON • RFC 3987, 5785, 5789, 5988, 6585, 7240 REST best practices Client-server Stateless Cacheable Layered system Uniform interface • Fielding, 2000; • Fielding & Taylor, 2002
  • 5. Center for Open Middleware Developing a read-write Linked Data Application What we can use up-to-now Servlet 3.0 JAX-RS 5 REST best practices HTTP LDP R+W LD Business Logic RDF Parsers/Serializers Third party apps and utilities that support LDP • LDP (and paging) 1.0 • RDF 1.1 • LD+JSON • RFC 3987, 5785, 5789, 5988, 6585, 7240 • Fielding, 2000; • Fielding & Taylor, 2002 • RFC 2616, 3986, 7230-7235 Syntax and routing No support at all Only for RDF-based data access
  • 6. Center for Open Middleware LDP4j to the rescue 6 • Java-based framework for the development of read-write Linked Data applications • Motto: Focus on your business logic, we will take care of the rest • License: Apache License, v2.0 • Features: • Simplified business object handling: • Lifting from and lowering to an intermediate representation that can be automatically unmarshalled from or marshalled to RDF, respectively. • LDP support • Protocol conversation control • Transparent metadata management • REST aware • Transparent publication of RDF URIRefs. • HTTP compliant • The framework takes care of fulfilling the requirements prescribed by the HTTP related RFCs (i.e., conditional requests processing, content negotiation, entity tag handling,…) www.ldp4j.org [email protected] https://github.com/ldp4j/ldp4j @LDP4j
  • 7. Center for Open Middleware LDP4j 101 High level architecture 7 Application API Application Engine Server Frontend Client Frontend R+W LD App. Consumer R+W LD App. Provider • LDP protocol handling • RDF transformation • Application management • Resource management • Endpoint management Server side HTTP handling • Templating annotations • Application configuration • Handler API • Handler extensibility APIs • Data manipulation API • State manipulation API Client side HTTP handling
  • 8. Center for Open Middleware LDP4j 101 Application model 8 Application Template Resource Endpoint Handler Session Snapshot publishes manipulates surrogateOf manages uses handledBy definesSemantics definesDeploymentPolicies Dataset exchanges provides
  • 9. Center for Open Middleware LDP4j 101 Application API 9 «describes» «annotation» Resource «describes» Application ResourceHandler Bootstrap Environment ContainerHandler DataSet Modifiable Deletable «uses» «uses» «produces» «uses» Individual Value Property Literal «extend» ContainerSnapshot ResourceSnapshot members «provides» «uses» ReadSession WriteSession AttachmentSnapshot «refersTo» ManagedIndividual LocalIndividual ExternalIndividual «represents» Configuration «uses» «uses» «annotation» BasicContainer «annotation» DirectContainer «annotation» IndirectContainer «describes» «describes» attachments «uses» «uses» «uses» «uses»
  • 10. Center for Open Middleware LDP4j 101 Execution Pipeline Dispatch request Preprocess request Op. Request Prepare Input data Op. Response Prepare response Create application session Dataset lowering RDF marshalling Execute business logic Terminate application session Enrich response data with LDP metadata Dataset Dataset Application Engine Server Frontend Client LDP4j Application 10 Handle resource lifecycle changes Handle endoint lifecycle changes LDP header generation Check LDP metadata consistency Remove LDP metadata Content negotiation handling Entity unmarshalling RDF lifting Conditional request handling LDP header analysis
  • 11. Center for Open Middleware LDP4j 101 Recipe for using LDP4j 11 1. Get LDP4j sources 2. Build LDP4j sources 3. Create a maven web-app project 4. Implement your business logic 5. Build the project 6. Deploy onto an servlet container 7. Enjoy!!!
  • 12. Center for Open Middleware LDP4j 101 Developing an application 12 • Create a maven web-app project: <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- Module coordinates here --> <packaging>war</packaging> <properties> <ldp4j.version>1.0.0-SNAPSHOT</ldp4j.version> <!-- Other properties here --> </properties> <dependencies> <dependency> <groupId>org.ldp4j.framework</groupId> <artifactId>ldp4j-application-api</artifactId> <version>${ldp4j.version}</version> </dependency> <dependency> <groupId>org.ldp4j.framework</groupId> <artifactId>ldp4j-server-core</artifactId> <scope>runtime</scope> <version>${ldp4j.version}</version> </dependency> <!-- Other dependencies here --> </dependencies> <!-- Other build setting here --> </project>
  • 13. Center for Open Middleware LDP4j 101 Developing an application 13 package org.example; import org.ldp4j.application.data.DataSet; import org.ldp4j.application.ext.Deletable; import org.ldp4j.application.ext.ResourceHandler; import org.ldp4j.application.session.ResourceSnapshot; import org.ldp4j.application.session.WriteSession; public class MyDeletableResourceHandler implements ResourceHandler, Deletable { @Override public DataSet get(ResourceSnapshot resource) { // TODO Implement your data retrieval logic return null; } @Override public void delete(ResourceSnapshot resource, WriteSession session) { // TODO Implement your deletion logic } } • Implement your resource handlers…
  • 14. Center for Open Middleware LDP4j 101 Developing an application 14 package org.example; import org.ldp4j.application.data.DataSet; import org.ldp4j.application.ext.ContainerHandler; import org.ldp4j.application.ext.ContentProcessingException; import org.ldp4j.application.ext.Modifiable; import org.ldp4j.application.session.ContainerSnapshot; import org.ldp4j.application.session.ResourceSnapshot; import org.ldp4j.application.session.WriteSession; public class MyModifiableContainerHandler implements ContainerHandler, Modifiable { @Override public DataSet get(ResourceSnapshot resource) { // TODO Implement your data retrieval logic return null; } @Override public ResourceSnapshot create(ContainerSnapshot container, DataSet representation, WriteSession session) { // TODO Implement your creation logic here return null; } @Override public void update(ResourceSnapshot resource, DataSet content, WriteSession session) throws ContentProcessingException { // TODO Implement your modification logic here } } • … and container handlers:
  • 15. Center for Open Middleware LDP4j 101 Developing an application 15 package org.example; ... import org.ldp4j.application.ext.annotations.BasicContainer; @BasicContainer( id = "containerTemplateId", memberHandler = MyDeletableResourceHandler.class ) public class MyModifiableContainerHandler implements ContainerHandler, Modifiable { ... } • Annotate the handlers: package org.example; ... import org.ldp4j.application.ext.annotations.Resource; @Resource( id="resourceTemplateId" ) public class MyDeletableResourceHandler implements ResourceHandler, Deletable { ... }
  • 16. Center for Open Middleware LDP4j 101 Developing an application 16 package org.example; import org.ldp4j.application.data.Name; import org.ldp4j.application.data.NamingScheme; import org.ldp4j.application.ext.Application; import org.ldp4j.application.ext.Configuration; import org.ldp4j.application.session.WriteSession; import org.ldp4j.application.setup.Bootstrap; import org.ldp4j.application.setup.Environment; public class MyApplication extends Application<Configuration> { @Override public void setup(Environment environment, Bootstrap<Configuration> bootstrap) { MyModifiableContainerHandler containerHandler=new MyModifiableContainerHandler(); MyDeletableResourceHandler resourceHandler=new MyDeletableResourceHandler(); // TODO Your handler configuration logic here bootstrap.addHandler(resourceHandler); bootstrap.addHandler(containerHandler); Name<?> rootContainerName=NamingScheme.getDefault().name("containerName") ; environment.publishResource(rootContainerName, MyModifiableContainerHandler.class, "containerRootPath"); } @Override public void initialize(WriteSession session) { // TODO Your handler initialization logic here // Remember, the session has to be updated to reflect the state of the data managed by the handlers } @Override public void shutdown() { // TODO Your shutdown logic here } } • Implement your application class:
  • 17. Center for Open Middleware LDP4j 101 Developing an application 17 • Update the web application descriptor: <?xml version="1.0" encoding="UTF-8"?> <web-app metadata-complete="false" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>My LDP4j Application</display-name> <context-param> <param-name>ldp4jTargetApplication</param-name> <param-value>org.example.MyApplication</param-value> </context-param> <!-- Other configuration here --> </web-app>
  • 18. Center for Open Middleware LDP4j in Use The Bugzilla adapter 18 • Exposes Bugzilla as an LDP-enabled application ALM iStack ontology  RDF  HTTP Headers LDP Clients Bugzilla LDP Adapter  XML-RPC  Native data model An example of bug creation POST /ita/containers/bugs HTTP/1.1 Host: localhost Content-Type: text/turtle @prefix ai: <http://delicias.dia.fi.upm.es/ontologies/alm-istack#> . …rest of the namespace declarations are omitted for brevity. <> a ai:ClientDefect; dcterms:creator <http://localhost/ita/ldp/resources/users/9> ; dcterms:title "Bugzilla adapter build is broken"^^xsd:string; dcterms:description "Bugzilla adapter build fails due to a test failure"^^xsd:string; oslc_asset:relatedAsset <http://localhost/ita/ldp/resources/versions/16> ; ai:relatedIncident <https://bugzilla.mozilla.org/show_bug.cgi?id=730698> . HTTP/1.1 201 Created Location: http://localhost/ita/ldp/resources/bugs/12 Link: <http://www.w3.org/ns/ldp#Resource>; rel='type' Content-Length: 0 Mihindukulasooriya, N., Esteban-Gutiérrez, M., García-Castro, R.: A Linked Data Platform adapter for the Bugzilla issue tracker. Demo at the 13th International Semantic Web Conference, Riva del Garda, Italy (Oct 2014)
  • 19. Center for Open Middleware LDP4j in Use morph-LDP 19 • Exposes relational databases as read-write Linked Data Database + R2RML Morph-LDP Read-write LD Oegmembers Table id fname lname @prefix rr: <http://www.w3.org/ns/r2rml#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . <TriplesMapPerson> a rr:TriplesMap; rr:logicalTable [ rr:tableName "oegmembers" ]; asun Asunción Gómez Pérez fpriyatna Freddy Priyatna mesteban Miguel Estebam rr:subjectMap [ a rr:Subject; rr:class foaf:Person; rr:template “http://example.org/oeg/members/{id}"; rr:termType rr:IRI; ]; nmihindu Nandana Mihindukulas ocorcho Oscar Corcho rr:predicateObjectMap [ rr:predicateMap [ rr:constant foaf:firstName ]; rr:objectMap [ rr:column “fname"; rr:termType rr:Literal; ]; ]; rgarcia Raul Garcia Castro rr:predicateObjectMap [ rr:predicateMap [ rr:constant foaf:lastName ]; rr:objectMap [ rr:column “lname"; rr:termType rr:Literal; ]; ]; … http://example.org/oeg/members/fpriyatna Legacy Applications Registration Office exposes morph-LDP Web App Relational Database Library configures Tabulator ldspider LDIF OpenLink Data Explorer Freddy Priyatna dereferences to GET /oeg/members/ HTTP/1.1 Host: example.org Accept: text/turtle 200 OK HTTP/1.1 200 OK Content-Type: text/turtle; charset=UTF-8 Link: <http://www.w3.org/ns/ldp#BasicContainer>; rel="type" ETag: W/"195482449" @prefix dcterms: <http://purl.org/dc/terms/>. @prefix ldp: <http://www.w3.org/ns/ldp#>. <> a ldp:BasicContainer; dcterms:title "Members of OEG, UPM"; ldp:contains <http://example.org/oeg/members/asun> ; ldp:contains <http://example.org/oeg/members/fpriyatna> ; ldp:contains <http://example.org/oeg/members/mesteban>; ldp:contains <http://example.org/oeg/members/nmihindu>; ldp:contains <http://example.org/oeg/members/ocorcho> ; ldp:contains <http://example.org/oeg/members/rgarcia> . mappings Mihindukulasooriya, N., Priyatna, F., Corcho, O., Garcıa-Castro, R., Esteban- Gutiérrez, M.: morph-LDP: An R2RML-based Linked Data Platform implementation. Demo at the 11th Extended Semantic Web Conference, Crete, Greece (May 2014)
  • 20. Center for Open Middleware Current status Supported LDP features • RDF Sources • Basic Containers • Direct Containers • Sever managed properties • Content preferences • Interaction models • LDP4j 1.0.0 to be released by the end of October: • Application API, • Application Engine, and • Server Frontend Unsupported LDP features • Non-RDF Sources • Put-to-Create LDP features under development • Indirect Containers 20 https://github.com/ldp4j/ldp4j
  • 21. Center for Open Middleware Implementation report for LDP4j 21 • Results of W3C LDP test suite • https://dvcs.w3.org/hg/ldpwg/raw-file/default/tests/reports/ldp.html Feature MUST SHOULD MAY RDF Sources 24/24 (100.0%) 7/7 (100.0%) 1/1 (100.0%) Basic Containers 37/37 (100.0%) 15/17 (88.2%) 3/4 (75.0%) Direct Containers 42/42 (100.0%) 17/19 (89.5%) 3/4 (75.0%) Indirect Containers 36/39 (92.3%) 15/17 (88.2%) 3/4 (75.0%)
  • 22. Center for Open Middleware Future work 22 • Support more LDP features: • Slug headers • Indirect containers • Paging* • Patch* • Other features beyond the LDP scope: • Vocabulary support • Content validation • Co-reference support • Transaction support • AAA support
  • 23. Center for Open Middleware Questions? Miguel Esteban Gutiérrez, Nandana Mihindukulasooriya, Raúl García Castro

Editor's Notes

  • #5: Start from scratch: need to deal with HTTP, REST, and LDP specifications, and develop your application meeting their respective requirements (which can be confusing, ambiguous, or contradictory) Reuse third party solutions: Avalability, compliance level, maturity, ‘quality’, purpose,… Big players: Callimachus: end-user CMS-alike solution Eclipse LyO: OSLC-oriented library (perfect fit for developing OSLC domain specific applications) Apache Marmotta: RDF store with LDP support that provides CMS alike features. Virtuoso: RDF Store with LDP support that provides advanced semantic web feat ldphp / gold
  • #6: Start from scratch: need to deal with HTTP, REST, and LDP specifications, and develop your application meeting their respective requirements (which can be confusing, ambiguous, or contradictory) Reuse third party solutions: Avalability, compliance level, maturity, ‘quality’, purpose,… Big players: Callimachus: end-user CMS-alike solution Eclipse LyO: OSLC-oriented library (perfect fit for developing OSLC domain specific applications) Apache Marmotta: RDF store with LDP support that provides CMS alike features. Virtuoso: RDF Store with LDP support that provides advanced semantic web feat ldphp / gold