SlideShare a Scribd company logo
1 of 20
Download to read offline
Ruben Taelman
imec - Ghent University
Components.js
A semantic dependency injection framework
A car has swappable components
A car has swappable components
A car has swappable components
Hard-wiring: Instantiate programmatically
let myCar = new Porsche356B({
color: 'ruby red',
engine: new V8Engine(),
tireFrontLeft: new MichelinLTXMS2(),
tireFrontRight: new MichelinLTXMS2(),
tireBackLeft: new MichelinLTXMS2(),
tireBackRight: new MichelinLTXMS2(),
});
myCar.drive();
+ Easy
- Less flexible swapping of components
Dependency Injection to the rescue!
let myCar = new Porsche356B({
color: 'ruby red',
engine: new V8Engine(),
tireFrontLeft: new MichelinLTXMS2(),
tireFrontRight: new MichelinLTXMS2(),
tireBackLeft: new MichelinLTXMS2(),
tireBackRight: new MichelinLTXMS2(),
});
myCar.drive();
Soft-wiring with declarative instantiation
let myCar = Loader.load('myCar-config.json');
myCar.drive();
+ Flexible swapping of components
- Extra layer of complexity
Components.js
Dependency injection framework for JavaScript
Declarative instantiation of components in external configuration file
Semantic configuration file (RDF)
Components.js Terminology
Module
Component
Instance
Components.js Terminology
Collection of components (e.g., a software package)
Something that can be instantiated (e.g., a class)
An instantiated Component
Module
Component
Instance
Components.js Terminology
Module
Component
Instance
Modules file
Configuration file
Collection of components (e.g., a software package)
Something that can be instantiated (e.g., a class)
An instantiated Component
Components.js configuration of a car
{
"@context": ...
"@id": "ex:myCar",
"@type": "porsche:356B",
"wheelFrontLeft": { "@type": "michelin:LTXMS2" },
"wheelFrontRight": { "@type": "michelin:LTXMS2" },
"wheelBackLeft": { "@type": "michelin:LTXMS2" },
"wheelBackRight": { "@type": "michelin:LTXMS2" },
"engine": { "@type": "leon:V8" }
}
JSON-LD, or any other RDF serialization
Configuration file
Components.js configuration of a car
{
"@context": ...
"@id": "ex:myCar",
"@type": "porsche:356B",
"wheelFrontLeft": { "@type": "michelin:LTXMS2" },
"wheelFrontRight": { "@type": "michelin:LTXMS2" },
"wheelBackLeft": { "@type": "michelin:LTXMS2" },
"wheelBackRight": { "@type": "michelin:LTXMS2" },
"engine": { "@type": "leon:V8" }
}
JSON-LD, or any other RDF serialization
URI of a component
Configuration file
Declarative component type description
{
"@context": …,
"@id": "porsche:module",
"@type": "Module",
"components": [{
"@id": "porsche:356B",
"@type": "Class",
"parameters": [
{ "@id": "porsche:356B/wheelFrontLeft", "unique": true },
{ "@id": "porsche:356B/wheelFrontRight", "unique": true },
{ "@id": "porsche:356B/wheelBackLeft", "unique": true },
{ "@id": "porsche:356B/wheelBackRight", "unique": true },
{ "@id": "porsche:356B/engine", "unique": true },
]
}, ...]
}
A module is a collection of components
Modules file
Declarative component type description
{
"@context": …,
"@id": "porsche:module",
"@type": "Module",
"components": [ {
"@id": "porsche:356B",
"@type": "Class",
"parameters": [
{ "@id": "porsche:356B/wheelFrontLeft", "unique": true },
{ "@id": "porsche:356B/wheelFrontRight", "unique": true },
{ "@id": "porsche:356B/wheelBackLeft", "unique": true },
{ "@id": "porsche:356B/wheelBackRight", "unique": true },
{ "@id": "porsche:356B/engine", "unique": true },
]
}, ...]
}
A component corresponds to a JavaScript class
Modules file
Get your hands on Components.js
https://www.npmjs.com/package/componentsjs
https://github.com/LinkedSoftwareDependencies/Components.js
https://componentsjs.readthedocs.io/
Ruben Taelman - @rubensworks
imec - Ghent University
Components.js
A semantic dependency injection framework
Demo: Real-world usage
Comunica: a meta-query engine
https://github.com/comunica/comunica
Why semantic configuration files?
Unique identification of components and instances via URIs
Split up config files, combine over the Web
Config files are meaningful as they use standard vocabularies
All of the benefits of Linked Data
Any RDF-enabled application can work with these config files
Visualize the instance graph
Reasoners can check if parameter values are valid
Reasoners can generate a config file best suited for a given situation
SPARQL querying over your config file

More Related Content

Similar to Components.js

Apache MetaModel - unified access to all your data points
Apache MetaModel - unified access to all your data pointsApache MetaModel - unified access to all your data points
Apache MetaModel - unified access to all your data pointsKasper Sørensen
 
Back to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkBack to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkMongoDB
 
Webinar: Schema Patterns and Your Storage Engine
Webinar: Schema Patterns and Your Storage EngineWebinar: Schema Patterns and Your Storage Engine
Webinar: Schema Patterns and Your Storage EngineMongoDB
 
R, Scikit-Learn and Apache Spark ML - What difference does it make?
R, Scikit-Learn and Apache Spark ML - What difference does it make?R, Scikit-Learn and Apache Spark ML - What difference does it make?
R, Scikit-Learn and Apache Spark ML - What difference does it make?Villu Ruusmann
 
Refresh Tallahassee: The RE/MAX Front End Story
Refresh Tallahassee: The RE/MAX Front End StoryRefresh Tallahassee: The RE/MAX Front End Story
Refresh Tallahassee: The RE/MAX Front End StoryRachael L Moore
 
JahiaOne - Jahia7: Query and Search API under the Hood
JahiaOne - Jahia7: Query and Search API under the HoodJahiaOne - Jahia7: Query and Search API under the Hood
JahiaOne - Jahia7: Query and Search API under the HoodJahia Solutions Group
 
Webinar: MongoDB and Polyglot Persistence Architecture
Webinar: MongoDB and Polyglot Persistence ArchitectureWebinar: MongoDB and Polyglot Persistence Architecture
Webinar: MongoDB and Polyglot Persistence ArchitectureMongoDB
 
A Little Backbone For Your App
A Little Backbone For Your AppA Little Backbone For Your App
A Little Backbone For Your AppLuca Mearelli
 
Intake 38 data access 5
Intake 38 data access 5Intake 38 data access 5
Intake 38 data access 5Mahmoud Ouf
 
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017Codemotion
 
C13,C33,A35 アプリケーション開発プラットフォームとしてのSAP HANA by Makoto Sugishita
C13,C33,A35 アプリケーション開発プラットフォームとしてのSAP HANA by Makoto SugishitaC13,C33,A35 アプリケーション開発プラットフォームとしてのSAP HANA by Makoto Sugishita
C13,C33,A35 アプリケーション開発プラットフォームとしてのSAP HANA by Makoto SugishitaInsight Technology, Inc.
 
CAR Report - xsl specification
CAR Report - xsl specificationCAR Report - xsl specification
CAR Report - xsl specificationGregory Weiss
 
Introductiontoapachecamel 110131060022-phpapp01
Introductiontoapachecamel 110131060022-phpapp01Introductiontoapachecamel 110131060022-phpapp01
Introductiontoapachecamel 110131060022-phpapp01dheeraj kumar
 
Introduction to Azure DocumentDB
Introduction to Azure DocumentDBIntroduction to Azure DocumentDB
Introduction to Azure DocumentDBAlex Zyl
 
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Edward Burns
 
Design patterns with Kotlin
Design patterns with KotlinDesign patterns with Kotlin
Design patterns with KotlinMurat Yener
 
Building Robust ETL Pipelines with Apache Spark
Building Robust ETL Pipelines with Apache SparkBuilding Robust ETL Pipelines with Apache Spark
Building Robust ETL Pipelines with Apache SparkDatabricks
 
Karate, the black belt of HTTP API testing?
Karate, the black belt of HTTP API testing?Karate, the black belt of HTTP API testing?
Karate, the black belt of HTTP API testing?Bertrand Delacretaz
 
Inheritance - the myth of code reuse | Andrei Raifura | CodeWay 2015
Inheritance - the myth of code reuse | Andrei Raifura | CodeWay 2015Inheritance - the myth of code reuse | Andrei Raifura | CodeWay 2015
Inheritance - the myth of code reuse | Andrei Raifura | CodeWay 2015YOPESO
 

Similar to Components.js (20)

Apache MetaModel - unified access to all your data points
Apache MetaModel - unified access to all your data pointsApache MetaModel - unified access to all your data points
Apache MetaModel - unified access to all your data points
 
Back to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkBack to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation Framework
 
Webinar: Schema Patterns and Your Storage Engine
Webinar: Schema Patterns and Your Storage EngineWebinar: Schema Patterns and Your Storage Engine
Webinar: Schema Patterns and Your Storage Engine
 
R, Scikit-Learn and Apache Spark ML - What difference does it make?
R, Scikit-Learn and Apache Spark ML - What difference does it make?R, Scikit-Learn and Apache Spark ML - What difference does it make?
R, Scikit-Learn and Apache Spark ML - What difference does it make?
 
Refresh Tallahassee: The RE/MAX Front End Story
Refresh Tallahassee: The RE/MAX Front End StoryRefresh Tallahassee: The RE/MAX Front End Story
Refresh Tallahassee: The RE/MAX Front End Story
 
JahiaOne - Jahia7: Query and Search API under the Hood
JahiaOne - Jahia7: Query and Search API under the HoodJahiaOne - Jahia7: Query and Search API under the Hood
JahiaOne - Jahia7: Query and Search API under the Hood
 
Webinar: MongoDB and Polyglot Persistence Architecture
Webinar: MongoDB and Polyglot Persistence ArchitectureWebinar: MongoDB and Polyglot Persistence Architecture
Webinar: MongoDB and Polyglot Persistence Architecture
 
A Little Backbone For Your App
A Little Backbone For Your AppA Little Backbone For Your App
A Little Backbone For Your App
 
Intake 38 data access 5
Intake 38 data access 5Intake 38 data access 5
Intake 38 data access 5
 
29. Treffen - Tobias Meier - TypeScript
29. Treffen - Tobias Meier - TypeScript29. Treffen - Tobias Meier - TypeScript
29. Treffen - Tobias Meier - TypeScript
 
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
Full-Text Search Explained - Philipp Krenn - Codemotion Rome 2017
 
C13,C33,A35 アプリケーション開発プラットフォームとしてのSAP HANA by Makoto Sugishita
C13,C33,A35 アプリケーション開発プラットフォームとしてのSAP HANA by Makoto SugishitaC13,C33,A35 アプリケーション開発プラットフォームとしてのSAP HANA by Makoto Sugishita
C13,C33,A35 アプリケーション開発プラットフォームとしてのSAP HANA by Makoto Sugishita
 
CAR Report - xsl specification
CAR Report - xsl specificationCAR Report - xsl specification
CAR Report - xsl specification
 
Introductiontoapachecamel 110131060022-phpapp01
Introductiontoapachecamel 110131060022-phpapp01Introductiontoapachecamel 110131060022-phpapp01
Introductiontoapachecamel 110131060022-phpapp01
 
Introduction to Azure DocumentDB
Introduction to Azure DocumentDBIntroduction to Azure DocumentDB
Introduction to Azure DocumentDB
 
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.
 
Design patterns with Kotlin
Design patterns with KotlinDesign patterns with Kotlin
Design patterns with Kotlin
 
Building Robust ETL Pipelines with Apache Spark
Building Robust ETL Pipelines with Apache SparkBuilding Robust ETL Pipelines with Apache Spark
Building Robust ETL Pipelines with Apache Spark
 
Karate, the black belt of HTTP API testing?
Karate, the black belt of HTTP API testing?Karate, the black belt of HTTP API testing?
Karate, the black belt of HTTP API testing?
 
Inheritance - the myth of code reuse | Andrei Raifura | CodeWay 2015
Inheritance - the myth of code reuse | Andrei Raifura | CodeWay 2015Inheritance - the myth of code reuse | Andrei Raifura | CodeWay 2015
Inheritance - the myth of code reuse | Andrei Raifura | CodeWay 2015
 

More from Ruben Taelman

Poster Demonstration of Comunica, a Web framework for querying heterogeneous ...
Poster Demonstration of Comunica, a Web framework for querying heterogeneous ...Poster Demonstration of Comunica, a Web framework for querying heterogeneous ...
Poster Demonstration of Comunica, a Web framework for querying heterogeneous ...Ruben Taelman
 
Poster GraphQL-LD: Linked Data Querying with GraphQL
Poster GraphQL-LD: Linked Data Querying with GraphQLPoster GraphQL-LD: Linked Data Querying with GraphQL
Poster GraphQL-LD: Linked Data Querying with GraphQLRuben Taelman
 
Poster Declaratively Describing Responses of Hypermedia-Driven Web APIs
Poster Declaratively Describing Responses of Hypermedia-Driven Web APIsPoster Declaratively Describing Responses of Hypermedia-Driven Web APIs
Poster Declaratively Describing Responses of Hypermedia-Driven Web APIsRuben Taelman
 
Versioned Triple Pattern Fragments
Versioned Triple Pattern FragmentsVersioned Triple Pattern Fragments
Versioned Triple Pattern FragmentsRuben Taelman
 
Versioned Triple Pattern Fragments
Versioned Triple Pattern FragmentsVersioned Triple Pattern Fragments
Versioned Triple Pattern FragmentsRuben Taelman
 
PoDiGG: Public Transport Dataset Generator based on Population Distributions
PoDiGG: Public Transport Dataset Generator based on Population DistributionsPoDiGG: Public Transport Dataset Generator based on Population Distributions
PoDiGG: Public Transport Dataset Generator based on Population DistributionsRuben Taelman
 
Exposing RDF Archives using Triple Pattern Fragments
Exposing RDF Archives using Triple Pattern FragmentsExposing RDF Archives using Triple Pattern Fragments
Exposing RDF Archives using Triple Pattern FragmentsRuben Taelman
 
EKAW - Publishing with Triple Pattern Fragments
EKAW - Publishing with Triple Pattern FragmentsEKAW - Publishing with Triple Pattern Fragments
EKAW - Publishing with Triple Pattern FragmentsRuben Taelman
 
EKAW - Triple Pattern Fragments
EKAW - Triple Pattern FragmentsEKAW - Triple Pattern Fragments
EKAW - Triple Pattern FragmentsRuben Taelman
 
EKAW - Linked Data Publishing
EKAW - Linked Data PublishingEKAW - Linked Data Publishing
EKAW - Linked Data PublishingRuben Taelman
 
Multidimensional Interfaces for Selecting Data with Order
Multidimensional Interfaces for Selecting Data with OrderMultidimensional Interfaces for Selecting Data with Order
Multidimensional Interfaces for Selecting Data with OrderRuben Taelman
 
Scalable Dynamic Data Consumption on the Web
Scalable Dynamic Data Consumption on the WebScalable Dynamic Data Consumption on the Web
Scalable Dynamic Data Consumption on the WebRuben Taelman
 
Moving RDF Stream Processing to the Client
Moving RDF Stream Processing to the ClientMoving RDF Stream Processing to the Client
Moving RDF Stream Processing to the ClientRuben Taelman
 
Querying Dynamic Datasources with Continuously Mapped Sensor Data
Querying Dynamic Datasources with Continuously Mapped Sensor DataQuerying Dynamic Datasources with Continuously Mapped Sensor Data
Querying Dynamic Datasources with Continuously Mapped Sensor DataRuben Taelman
 
Continuous Self-Updating Query Results over Dynamic Linked Data
Continuous Self-Updating Query Results over Dynamic Linked DataContinuous Self-Updating Query Results over Dynamic Linked Data
Continuous Self-Updating Query Results over Dynamic Linked DataRuben Taelman
 
Continuously Updating Query Results over Real-Time Linked Data
Continuously Updating Query Results over Real-Time Linked DataContinuously Updating Query Results over Real-Time Linked Data
Continuously Updating Query Results over Real-Time Linked DataRuben Taelman
 

More from Ruben Taelman (17)

Poster Demonstration of Comunica, a Web framework for querying heterogeneous ...
Poster Demonstration of Comunica, a Web framework for querying heterogeneous ...Poster Demonstration of Comunica, a Web framework for querying heterogeneous ...
Poster Demonstration of Comunica, a Web framework for querying heterogeneous ...
 
Poster GraphQL-LD: Linked Data Querying with GraphQL
Poster GraphQL-LD: Linked Data Querying with GraphQLPoster GraphQL-LD: Linked Data Querying with GraphQL
Poster GraphQL-LD: Linked Data Querying with GraphQL
 
Poster Declaratively Describing Responses of Hypermedia-Driven Web APIs
Poster Declaratively Describing Responses of Hypermedia-Driven Web APIsPoster Declaratively Describing Responses of Hypermedia-Driven Web APIs
Poster Declaratively Describing Responses of Hypermedia-Driven Web APIs
 
Versioned Triple Pattern Fragments
Versioned Triple Pattern FragmentsVersioned Triple Pattern Fragments
Versioned Triple Pattern Fragments
 
Versioned Triple Pattern Fragments
Versioned Triple Pattern FragmentsVersioned Triple Pattern Fragments
Versioned Triple Pattern Fragments
 
PoDiGG: Public Transport Dataset Generator based on Population Distributions
PoDiGG: Public Transport Dataset Generator based on Population DistributionsPoDiGG: Public Transport Dataset Generator based on Population Distributions
PoDiGG: Public Transport Dataset Generator based on Population Distributions
 
Exposing RDF Archives using Triple Pattern Fragments
Exposing RDF Archives using Triple Pattern FragmentsExposing RDF Archives using Triple Pattern Fragments
Exposing RDF Archives using Triple Pattern Fragments
 
EKAW - Publishing with Triple Pattern Fragments
EKAW - Publishing with Triple Pattern FragmentsEKAW - Publishing with Triple Pattern Fragments
EKAW - Publishing with Triple Pattern Fragments
 
EKAW - Triple Pattern Fragments
EKAW - Triple Pattern FragmentsEKAW - Triple Pattern Fragments
EKAW - Triple Pattern Fragments
 
EKAW - Linked Data Publishing
EKAW - Linked Data PublishingEKAW - Linked Data Publishing
EKAW - Linked Data Publishing
 
Docker Intro
Docker IntroDocker Intro
Docker Intro
 
Multidimensional Interfaces for Selecting Data with Order
Multidimensional Interfaces for Selecting Data with OrderMultidimensional Interfaces for Selecting Data with Order
Multidimensional Interfaces for Selecting Data with Order
 
Scalable Dynamic Data Consumption on the Web
Scalable Dynamic Data Consumption on the WebScalable Dynamic Data Consumption on the Web
Scalable Dynamic Data Consumption on the Web
 
Moving RDF Stream Processing to the Client
Moving RDF Stream Processing to the ClientMoving RDF Stream Processing to the Client
Moving RDF Stream Processing to the Client
 
Querying Dynamic Datasources with Continuously Mapped Sensor Data
Querying Dynamic Datasources with Continuously Mapped Sensor DataQuerying Dynamic Datasources with Continuously Mapped Sensor Data
Querying Dynamic Datasources with Continuously Mapped Sensor Data
 
Continuous Self-Updating Query Results over Dynamic Linked Data
Continuous Self-Updating Query Results over Dynamic Linked DataContinuous Self-Updating Query Results over Dynamic Linked Data
Continuous Self-Updating Query Results over Dynamic Linked Data
 
Continuously Updating Query Results over Real-Time Linked Data
Continuously Updating Query Results over Real-Time Linked DataContinuously Updating Query Results over Real-Time Linked Data
Continuously Updating Query Results over Real-Time Linked Data
 

Recently uploaded

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Recently uploaded (20)

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Components.js

  • 1. Ruben Taelman imec - Ghent University Components.js A semantic dependency injection framework
  • 2. A car has swappable components
  • 3. A car has swappable components
  • 4. A car has swappable components
  • 5. Hard-wiring: Instantiate programmatically let myCar = new Porsche356B({ color: 'ruby red', engine: new V8Engine(), tireFrontLeft: new MichelinLTXMS2(), tireFrontRight: new MichelinLTXMS2(), tireBackLeft: new MichelinLTXMS2(), tireBackRight: new MichelinLTXMS2(), }); myCar.drive(); + Easy - Less flexible swapping of components
  • 6. Dependency Injection to the rescue! let myCar = new Porsche356B({ color: 'ruby red', engine: new V8Engine(), tireFrontLeft: new MichelinLTXMS2(), tireFrontRight: new MichelinLTXMS2(), tireBackLeft: new MichelinLTXMS2(), tireBackRight: new MichelinLTXMS2(), }); myCar.drive();
  • 7. Soft-wiring with declarative instantiation let myCar = Loader.load('myCar-config.json'); myCar.drive(); + Flexible swapping of components - Extra layer of complexity
  • 8. Components.js Dependency injection framework for JavaScript Declarative instantiation of components in external configuration file Semantic configuration file (RDF)
  • 10. Components.js Terminology Collection of components (e.g., a software package) Something that can be instantiated (e.g., a class) An instantiated Component Module Component Instance
  • 11. Components.js Terminology Module Component Instance Modules file Configuration file Collection of components (e.g., a software package) Something that can be instantiated (e.g., a class) An instantiated Component
  • 12. Components.js configuration of a car { "@context": ... "@id": "ex:myCar", "@type": "porsche:356B", "wheelFrontLeft": { "@type": "michelin:LTXMS2" }, "wheelFrontRight": { "@type": "michelin:LTXMS2" }, "wheelBackLeft": { "@type": "michelin:LTXMS2" }, "wheelBackRight": { "@type": "michelin:LTXMS2" }, "engine": { "@type": "leon:V8" } } JSON-LD, or any other RDF serialization Configuration file
  • 13. Components.js configuration of a car { "@context": ... "@id": "ex:myCar", "@type": "porsche:356B", "wheelFrontLeft": { "@type": "michelin:LTXMS2" }, "wheelFrontRight": { "@type": "michelin:LTXMS2" }, "wheelBackLeft": { "@type": "michelin:LTXMS2" }, "wheelBackRight": { "@type": "michelin:LTXMS2" }, "engine": { "@type": "leon:V8" } } JSON-LD, or any other RDF serialization URI of a component Configuration file
  • 14. Declarative component type description { "@context": …, "@id": "porsche:module", "@type": "Module", "components": [{ "@id": "porsche:356B", "@type": "Class", "parameters": [ { "@id": "porsche:356B/wheelFrontLeft", "unique": true }, { "@id": "porsche:356B/wheelFrontRight", "unique": true }, { "@id": "porsche:356B/wheelBackLeft", "unique": true }, { "@id": "porsche:356B/wheelBackRight", "unique": true }, { "@id": "porsche:356B/engine", "unique": true }, ] }, ...] } A module is a collection of components Modules file
  • 15. Declarative component type description { "@context": …, "@id": "porsche:module", "@type": "Module", "components": [ { "@id": "porsche:356B", "@type": "Class", "parameters": [ { "@id": "porsche:356B/wheelFrontLeft", "unique": true }, { "@id": "porsche:356B/wheelFrontRight", "unique": true }, { "@id": "porsche:356B/wheelBackLeft", "unique": true }, { "@id": "porsche:356B/wheelBackRight", "unique": true }, { "@id": "porsche:356B/engine", "unique": true }, ] }, ...] } A component corresponds to a JavaScript class Modules file
  • 16. Get your hands on Components.js https://www.npmjs.com/package/componentsjs https://github.com/LinkedSoftwareDependencies/Components.js https://componentsjs.readthedocs.io/
  • 17. Ruben Taelman - @rubensworks imec - Ghent University Components.js A semantic dependency injection framework
  • 18.
  • 19. Demo: Real-world usage Comunica: a meta-query engine https://github.com/comunica/comunica
  • 20. Why semantic configuration files? Unique identification of components and instances via URIs Split up config files, combine over the Web Config files are meaningful as they use standard vocabularies All of the benefits of Linked Data Any RDF-enabled application can work with these config files Visualize the instance graph Reasoners can check if parameter values are valid Reasoners can generate a config file best suited for a given situation SPARQL querying over your config file