SlideShare a Scribd company logo
The	
  Mashup	
  Component	
  
                 Descrip3on	
  Language	
  

                            Saeed	
  Aghaee	
  and	
  Cesare	
  Pautasso	
  
                                                      	
  
                                     Faculty	
  of	
  Informa3cs	
  
                                University	
  of	
  Lugano	
  (USI)	
  
                                                      	
  
hCp://www.saeed-­‐aghaee.info	
  
                                                      	
  
hCp://www.pautasso.info	
  	
                         	
                       1	
  
hCp://www.jopera.org	
  	
                            	
  
Web	
  Mashups	
  



                     2	
  
 
                                                       	
  
Amazon	
  S3	
  API	
     Google	
  Custom	
  
                                                 YouTube	
  Player	
  
                             Search	
  



                                                       	
  
  Yahoo	
  Term	
  
                            Twi>er	
  API	
       Google	
  Maps	
  
   Extrac;on	
  
                                                      API	
  




    Flickr	
  API	
         Twilio	
  SMS	
          eBay	
  API	
  

                                                                         3	
  
4	
  
5	
  
Mashup	
  Development	
  

                              	
  
    Twi>er	
  API	
      Google	
  Maps	
  
                             API	
  



    Twilio	
  SMS`	
       eBay	
  API	
  




                                              6	
  
Ideal	
  




            7	
  
Reality	
  




              8	
  
 
	
  




       9	
  
         	
            	
  
Logic	
     Logic	
       User	
  
                        Interface	
  




             	
             	
  
Logic	
                   User	
  
            Data	
  
                        Interface	
  




 	
                        	
  
            Logic	
  
Data	
                    Data	
  

                                        10	
  
                      	
  
           SOAP	
  
REST	
                JavaScript	
  




            	
            	
  
REST	
  
           HTTP	
     JavaScript	
  




 	
                       	
  
           HTTP	
  
REST	
                  SOAP	
  

                                       11	
  
Ideal	
  




How	
  to	
  deal	
  with	
  Heterogeneity?	
  	
  



                                               12	
  
Component	
  Meta-­‐model	
  



                                13	
  
 
	
  




       1	
  




               14	
  
Abstrac3on	
  
	
  
Expressive	
  power	
  
	
  
Extensibility	
  




                          15	
  
Abstrac3on	
  
	
  
Expressive	
  power	
  
	
  
Extensibility	
  




                          16	
  
Abstrac3on	
  
	
  

Expressive	
  
power	
  
	
  
Extensibility	
  




                    17	
  
Abstrac3on	
  
	
  
Expressive	
  power	
  
	
  

Extensibility	
  




                          18	
  
The	
  Mashup	
  Component	
  Descrip3on	
  
           Language	
  (MCDL)	
  



                                         19	
  
Technology	
  independent	
  




 Technology	
  dependent	
  
             	
  




                                20	
  
Technology	
  
                      independent	
     Mashup	
  Development	
  
                      Technology	
      Toolkit	
  
                      dependent	
  

                           	
  

                     Publish	
  
 Component	
                               Library	
  
 provider	
  




                 Discover	
  
                 Execute	
  
                 Compose	
  

                                              Execu3on	
  	
  
                                              Engine	
  
Composer	
  

                                                                 21	
  
 
               	
     Technology	
  independent	
  

Composer	
  



                       Technology	
  dependent	
  
                                   	
  




                                                      22	
  
 
               	
  

Composer	
  



                      Technology	
  dependent	
  
                                  	
  




                                                    23	
  
Tasks	
  




            24	
  
Events	
  




             25	
  
I/O	
  Parameters	
  




                        26	
  
TwiCer	
  APIs	
  Interface	
  
Tasks	
             Input	
         Output	
  
Search	
            query	
         Tweets	
  




                                                 27	
  
Google	
  Maps	
  Interface	
  
Tasks	
              Input	
             Output	
  
ShowMarkers	
        •  Lat	
            -­‐	
  
                     •  Lng	
  
GetCoordinates	
     Address	
           •  Lat	
  
                                         •  Lng	
  


Events	
                    Output	
  
OnMapClick	
                •  Lat	
  
                            •  Lng	
  


                                                      28	
  
Technology	
  independent	
  




                    	
  
                    	
  
                              Technology	
  dependent	
  
                                          	
  
Mashup	
  Execu3on	
  	
  
Engine	
  




                                                             29	
  
Wrapper	
  Types	
  



                       30	
  
Wrapper	
  Types	
  
Category	
           Wrapper	
  Types	
  


Widget	
             IFrame	
  
                     DIV	
  
Data	
  Source	
     Database	
  
                     Web	
  feed	
  
Service	
            HTTP/REST	
  
                     RPC	
  

                                            31	
  
TwiCer	
  APIs	
  Wrapper	
  Type	
  
Category	
           Wrapper	
  Types	
  


Widget	
             IFrame	
  
                     DIV	
  
Data	
  Source	
     Database	
  
                     Web	
  feed	
  
Service	
            HTTP/REST	
            TwiCer	
  APIs	
  
                     RPC	
  

                                                                 32	
  
Google	
  Maps	
  Wrapper	
  Type	
  
Category	
           Wrapper	
  Types	
  


Widget	
             IFrame	
  
                     DIV	
                  Google	
  Maps	
  
Data	
  Source	
     Database	
  
                     Web	
  feed	
  
Service	
            HTTP/REST	
  
                     RPC	
  

                                                                 33	
  
MCDL	
  Meta-­‐model	
  



                           34	
  
JavaScript	
  Object	
  Nota3on	
  
          (JSON)	
  

                  MCDL	
  
           { "Interface": {
               "name":"",
                                                   "input": [
                                                       {"name": "", "value": ""}
               "property":[                            ]
                 {"name":"", "value":""            }],
               }],
                                                  "datasource_wrapper": [
             "task": [                             {"type":"", "name":"",
               {"name": "",                        "input": [
               "description":"",                       {"name": "", "value": ""}
               "input": [                              ]
                 {"name": "", "value": "",         }],
                 "type": "" | "mime-type": ""}
                 ],                               "widget_wrapper": [
               "output": [                         {"type":"", name":"",
                 {"name": "", "value": "",
                                                   "input": [
                 "type": "" | "mime-type": ""}         {"name": "", "value": ""}
                 ]                                     ]
               }],                                 }],

              "event": [                           "mapper": [
               {"name": "", "description":"",       {"source" : ["ref"],
               "output": [                          "destination" : [{"name":"ref",
                 {"name": "", "value": "",             "correspond":"ref" |
                 "type": "" | "mime-type": ""}         "template":"" |
                 ]                                     "parser":{ "language":"",
               }]                                                 "query":""}}]
            },                                      }]
                                                 }}
            "service_wrapper": [
             {"type":"", "name":"",




                                                                                      35	
  
JSON	
  Schema	
  
                                         "input": [
                                        "service_wrapper": [
{ "Interface": {
                                         "input": [ "name":"", ""}
                                         {"type":"", "", "value":
                                             {"name":
    "name":"",
    "property":[                           "input": [ "", "value": ""}
                                             ]
                                             {"name":
                                         }], ]
                                             {"name": "", "value": ""}
      {"name":"", "value":""
                                         }], ]
    }],
                                        "datasource_wrapper": [
                                         }],
                                        "datasource_wrapper": [
                                         {"type":"", "name":"",
  "task": [
                                         "input": [
                                         {"type":"", "name":"",
                                        "datasource_wrapper": [
    {"name": "",
                                         "input": [ "name":"", ""}
                                         {"type":"", "", "value":
                                             {"name":
    "description":"",
                                             ]
                                             {"name": "", "value": ""}
                                         "input": [
    "input": [
                                         }], ]
                                             {"name": "", "value": ""}
      {"name": "", "value": "",
                                         }], ]
      "type": "" | "mime-type": ""}
                                        "widget_wrapper": [
                                         }],
      ],
                                        "widget_wrapper": [
                                         {"type":"", name":"",
    "output": [
                                         {"type":"", name":"",
                                        "widget_wrapper": [
      {"name": "", "value": "",
                                         "input": [ name":"",
                                         {"type":"",
                                         "input": [
                                             {"name": "", "value": ""}
      "type": "" | "mime-type": ""}
                                             ]
                                             {"name": "", "value": ""}
                                         "input": [
      ]
                                         }], ]
                                             {"name": "", "value": ""}
    }],
                                         }], ]
   "event": [                            }],
                                        "mapper": [
    {"name": "", "description":"",
                                        "mapper": [: ["ref"],
                                         {"source"
    "output": [
                                         {"source" : ["ref"],
                                         "destination" : [{"name":"ref",
      {"name": "", "value": "",
                                         "destination" : [{"name":"ref",
                                             "correspond":"ref" |
      "type": "" | "mime-type": ""}
                                             "correspond":"ref" |
                                             "template":"" |
      ]
                                             "template":"" |
                                             "parser":{ "language":"",
    }]
                                             "parser":{ "language":"",
                                                        "query":""}}]
 },
                                         }]             "query":""}}]
                                      }} }]
                                      }}

                                                                           36	
  
Component	
  Meta-­‐model	
  
                                                                    Event      0..*
               Rule
                                                        1..*    -name
                                                                -description
                                   )
                                put                                                                   +o
                           ( out                                                                           ut
                 tio   n                                                                                     pu
            tina                              Rule                                                                t
         des
                                                                                                                  0..*
Mapper                                                   1..*      Wrapper
                    destination (input)                                                                        Parameter        Interface
                                                                -name
                                                                                                           +name             -name
                                                         1..*                                              -value
                    source (output)
                                                                                                           -type/MIME-type
                                                                                                       0..* 0..*
                           sou                                                                    t
                                  rce                                                         u
               de                       (in                                                np
                    stin                      pu                                      +i           u   t
                           atio                    t)                                           tp
                                  n(
                                       ou                1..*                               +ou
                                            tpu                    Task
                                                  t)
                                                              -name
                                                         1..*
                                                              -description            1..*
               Rule




                                                                                                                                            37	
  
Technology	
  Independent	
  
                                                                    Event      0..*
               Rule
                                                        1..*    -name
                                                                -description
                                   )
                                put                                                                   +o
                           ( out                                                                           ut
                 tio   n                                                                                     pu
            tina                              Rule                                                                t
         des
                                                                                                                  0..*
Mapper                                                   1..*      Wrapper
                    destination (input)                                                                        Parameter        Interface
                                                                -name
                                                                                                           +name             -name
                                                         1..*                                              -value
                    source (output)
                                                                                                           -type/MIME-type
                                                                                                       0..* 0..*
                           sou                                                                    t
                                  rce                                                         u
               de                       (in                                                np
                    stin                      pu                                      +i           u   t
                           atio                    t)                                           tp
                                  n(
                                       ou                1..*                               +ou
                                            tpu                    Task
                                                  t)
                                                              -name
                                                         1..*
                                                              -description            1..*
               Rule




                                                                                                                                            38	
  
Technology	
  Independent	
  
{ "Interface": {                       "service_wrapper": [
    "name":"",                          {"type":"", "name":"",
    "property":[
      {"name":"", "value":""            "input": [
    }],                                     {"name": "", "value": ""}
                                            ]
  "task": [                             }],
    {"name": "",
    "description":"",                  "datasource_wrapper": [
    "input": [                          {"type":"", "name":"",
      {"name": "", "value": "",         "input": [
      "type": "" | "mime-type": ""}         {"name": "", "value": ""}
      ],                                    ]
    "output": [                         }],
      {"name": "", "value": "",
                                       "widget_wrapper": [
      "type": "" | "mime-type": ""}     {"type":"", name":"",
      ]
    }],                                 "input": [
                                            {"name": "", "value": ""}
   "event": [                               ]
    {"name": "", "description":"",      }],
    "output": [
      {"name": "", "value": "",         "mapper": [
      "type": "" | "mime-type": ""}      {"source" : ["ref"],
      ]                                  "destination" : [{"name":"ref",
    }]                                      "correspond":"ref" |
 },                                         "template":"" |
                                            "parser":{ "language":"",
                                                       "query":""}}]
                                         }]
                                      }}                                   39	
  
Technology	
  Dependent	
  
                                                                    Event      0..*
               Rule
                                                        1..*    -name
                                                                -description
                                   )
                                put                                                                   +o
                           ( out                                                                           ut
                 tio   n                                                                                     pu
            tina                              Rule                                                                t
         des
                                                                                                                  0..*
Mapper                                                   1..*      Wrapper
                    destination (input)                                                                        Parameter        Interface
                                                                -name
                                                                                                           +name             -name
                                                         1..*                                              -value
                    source (output)
                                                                                                           -type/MIME-type
                                                                                                       0..* 0..*
                           sou                                                                    t
                                  rce                                                         u
               de                       (in                                                np
                    stin                      pu                                      +i           u   t
                           atio                    t)                                           tp
                                  n(
                                       ou                1..*                               +ou
                                            tpu                    Task
                                                  t)
                                                              -name
                                                         1..*
                                                              -description            1..*
               Rule




                                                                                                                                            40	
  
Technology	
  Dependent	
  
                                         "input": [
                                        "service_wrapper": [
{ "Interface": {
                                         "input": [ "name":"", ""}
                                         {"type":"", "", "value":
                                             {"name":
    "name":"",
    "property":[                           "input": [ "", "value": ""}
                                             ]
                                             {"name":
                                         }], ]
                                             {"name": "", "value": ""}
      {"name":"", "value":""
                                         }], ]
    }],
                                        "datasource_wrapper": [
                                         }],
                                        "datasource_wrapper": [
                                         {"type":"", "name":"",
  "task": [
                                         "input": [
                                         {"type":"", "name":"",
                                        "datasource_wrapper": [
    {"name": "",
                                         "input": [ "name":"", ""}
                                         {"type":"", "", "value":
                                             {"name":
    "description":"",
                                             ]
                                             {"name": "", "value": ""}
                                         "input": [
    "input": [
                                         }], ]
                                             {"name": "", "value": ""}
      {"name": "", "value": "",
                                         }], ]
      "type": "" | "mime-type": ""}
                                        "widget_wrapper": [
                                         }],
      ],
                                        "widget_wrapper": [
                                         {"type":"", name":"",
    "output": [
                                         {"type":"", name":"",
                                        "widget_wrapper": [
      {"name": "", "value": "",
                                         "input": [ name":"",
                                         {"type":"",
                                         "input": [
                                             {"name": "", "value": ""}
      "type": "" | "mime-type": ""}
                                             ]
                                             {"name": "", "value": ""}
                                         "input": [
      ]
                                         }], ]
                                             {"name": "", "value": ""}
    }],
                                         }], ]
   "event": [                            }],
                                        "mapper": [
    {"name": "", "description":"",
                                        "mapper": [: ["ref"],
                                         {"source"
    "output": [
                                         {"source" : ["ref"],
                                         "destination" : [{"name":"ref",
      {"name": "", "value": "",
                                         "destination" : [{"name":"ref",
                                             "correspond":"ref" |
      "type": "" | "mime-type": ""}
                                             "correspond":"ref" |
                                             "template":"" |
      ]
                                             "template":"" |
                                             "parser":{ "language":"",
    }]
                                             "parser":{ "language":"",
                                                        "query":""}}]
 },
                                         }]             "query":""}}]
                                      }} }]
                                      }}

                                                                           41	
  
Wrapper	
  Types	
  Hierarchy	
  
                                                                     Wrapper
  I : Input   O : Output      T : Task      E: Event              -name




                        Widget                                      Data Source                                             Service
                    +style         I                            +streaming             I                                 +endPoint    I
                    +show()        T                            +invoke()              T                                 +mode        I
                    +hide()        T                            +stopStreaming()       T                                 +invoke()    T
                    +restyle()     T                            +onUpdate()            E                                 +onReceive() E



       DIV              IFrame                     Database         Web Feed                            HTTP/REST              RPC
+ID             I    +cutFrom       I src       +type       I    +frequency        I       src 1   +method           I   +type           I
+extScript      I    +cutTo         I           +server     I                                      +requestHeader    I   +inMessage      I
+initScript     I                               +port       I                                      +request          I   +methodName     I
                    function                    +user       I                                      +WADL             I   +outMessage     O
  event                     0..*                +pass       I                                      +responseHeader   O
           0..*                                 +database                                          +response         O
                                                            I
      Event            Function                 +script                                            +status           O
                                                            I
+initEvent      I    +script    I               +prepare                                                                     SOAP
                                                            I
+callback       I    +call      T               +interval                                                1               +WSDL           I
                                                            I
+onEvent()      E                               +data       O                                                            +portType       I




                                                                                                                                42	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                43	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                44	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                45	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                46	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                47	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                48	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                49	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                50	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                51	
  
MCDL	
  for	
  TwiCer	
  API	
  
{ "Interface": {
    "name":"Twitter APIs",                   "input": [
    "property":[                                 {"name": "", "value": ""}
      {"version":"1"                             ]
    }],                                      }],
                                            "service_wrapper": [
   "task": [                                "datasource_wrapper": [
                                             {"type":"HTTP/REST",
     {"name": "search",                      {"type":"", "name":"",
                                              "name":"twitter_wrapper",
     "description":"Allows you to search     "input": [ [
                                               "input":
for tweets based on a keyword",                  {"name": "", "value": ""}
                                                 {"name": "method",
     "input": [                                  ]"value": "GET"}
       {"name": "query",                     }], ]
        "value": "USI",                      }],
       "type": "String"}                    "widget_wrapper": [
       ],                                    {"type":"", name":"",
     "output": [
       {"name": "tweets",                    "input": [
                                                 {"name": "", "value": ""}
        "mime-type": "JSON"}                     ]
        ]                                    }],
      }],
                                             "mapper": [
                                           "mapper": [
 },                                           {"source" : ["ref"],
                                              {"source" : ["search.query"],
                                              "destination" : [{"name":"ref",
                                              "destination" :
                                                  "correspond":"ref" |
                                           [{"name":"twitter_wrapper.URL",
                                                  "template":"" |
                                                  "template":"http://
                                                  "parser":{ "language":"",
                                           search.twitter.com/search.json?
                                                             "query":""}}]
                                           q={search.query}" |
                                              }]
                                                }]
                                           }}
                                              }]
                                           }}
                                                                                52	
  
Mashup	
  development	
  requires	
  a	
  highly	
  
  abstracted,	
  expressive,	
  and	
  
extensible	
  component	
  meta-­‐model	
  


                                                  53	
  
The	
  Mashup	
  Component	
  
                 Descrip3on	
  Language	
  

                            Saeed	
  Aghaee	
  and	
  Cesare	
  Pautasso	
  
                                                      	
  
                                     Faculty	
  of	
  Informa3cs	
  
                                University	
  of	
  Lugano	
  (USI)	
  
                                                      	
  
hCp://www.saeed-­‐aghaee.info	
  
                                                      	
  
hCp://www.pautasso.info	
  	
                         	
                       54	
  
hCp://www.jopera.org	
  	
                            	
  

More Related Content

PDF
Apps 4 English Language Learners
PPT
Language descriptions
PPT
Literature Component
PPTX
Language description presentation
PPT
Esp.language descriptions
PPTX
Esp language descriptions
PDF
INTRODUCTION TO UML DIAGRAMS
PPT
Importance of English Language
Apps 4 English Language Learners
Language descriptions
Literature Component
Language description presentation
Esp.language descriptions
Esp language descriptions
INTRODUCTION TO UML DIAGRAMS
Importance of English Language

Similar to The Mashup Component Description Language (20)

PDF
remash! - Blueprints for RESTfulSituational Applications
PPTX
A great api is hard to find
PDF
I'll See You On the Write Side of the Web
PDF
Making Things Work Together
PDF
Mashups
PDF
Better Genealogy Through APIs
PDF
Web 2.0 101
PDF
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
PPTX
webinos - Architecture and Strategy
PDF
Mashups For Soa
PDF
The Developer Experience
PDF
Prakash Narayan Building Social Web V1
ODP
Chisimba - introduction to practical demo
PDF
Rewire the Net
PDF
Keynote Client Connectivity And The Cloud
PDF
Don Schwarz App Engine Talk
PDF
Ericsson Labs OTA09 090925
PDF
Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来
PDF
Mobile Mashups
remash! - Blueprints for RESTfulSituational Applications
A great api is hard to find
I'll See You On the Write Side of the Web
Making Things Work Together
Mashups
Better Genealogy Through APIs
Web 2.0 101
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
webinos - Architecture and Strategy
Mashups For Soa
The Developer Experience
Prakash Narayan Building Social Web V1
Chisimba - introduction to practical demo
Rewire the Net
Keynote Client Connectivity And The Cloud
Don Schwarz App Engine Talk
Ericsson Labs OTA09 090925
Open Source Conference 2010 福岡 W3C/Keio 講演 ウェブ技術の現状と将来
Mobile Mashups
Ad

Recently uploaded (20)

PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
KodekX | Application Modernization Development
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPT
Teaching material agriculture food technology
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
cuic standard and advanced reporting.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Cloud computing and distributed systems.
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Network Security Unit 5.pdf for BCA BBA.
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Encapsulation_ Review paper, used for researhc scholars
Review of recent advances in non-invasive hemoglobin estimation
KodekX | Application Modernization Development
Understanding_Digital_Forensics_Presentation.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Reach Out and Touch Someone: Haptics and Empathic Computing
Teaching material agriculture food technology
Diabetes mellitus diagnosis method based random forest with bat algorithm
cuic standard and advanced reporting.pdf
Spectral efficient network and resource selection model in 5G networks
MYSQL Presentation for SQL database connectivity
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Cloud computing and distributed systems.
Programs and apps: productivity, graphics, security and other tools
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Ad

The Mashup Component Description Language

  • 1. The  Mashup  Component   Descrip3on  Language   Saeed  Aghaee  and  Cesare  Pautasso     Faculty  of  Informa3cs   University  of  Lugano  (USI)     hCp://www.saeed-­‐aghaee.info     hCp://www.pautasso.info       1   hCp://www.jopera.org      
  • 3.     Amazon  S3  API   Google  Custom   YouTube  Player   Search     Yahoo  Term   Twi>er  API   Google  Maps   Extrac;on   API   Flickr  API   Twilio  SMS   eBay  API   3  
  • 6. Mashup  Development     Twi>er  API   Google  Maps   API   Twilio  SMS`   eBay  API   6  
  • 7. Ideal   7  
  • 8. Reality   8  
  • 9.     9  
  • 10.       Logic   Logic   User   Interface       Logic   User   Data   Interface       Logic   Data   Data   10  
  • 11.     SOAP   REST   JavaScript       REST   HTTP   JavaScript       HTTP   REST   SOAP   11  
  • 12. Ideal   How  to  deal  with  Heterogeneity?     12  
  • 14.     1   14  
  • 15. Abstrac3on     Expressive  power     Extensibility   15  
  • 16. Abstrac3on     Expressive  power     Extensibility   16  
  • 17. Abstrac3on     Expressive   power     Extensibility   17  
  • 18. Abstrac3on     Expressive  power     Extensibility   18  
  • 19. The  Mashup  Component  Descrip3on   Language  (MCDL)   19  
  • 20. Technology  independent   Technology  dependent     20  
  • 21. Technology   independent   Mashup  Development   Technology   Toolkit   dependent     Publish   Component   Library   provider   Discover   Execute   Compose   Execu3on     Engine   Composer   21  
  • 22.     Technology  independent   Composer   Technology  dependent     22  
  • 23.     Composer   Technology  dependent     23  
  • 24. Tasks   24  
  • 25. Events   25  
  • 27. TwiCer  APIs  Interface   Tasks   Input   Output   Search   query   Tweets   27  
  • 28. Google  Maps  Interface   Tasks   Input   Output   ShowMarkers   •  Lat   -­‐   •  Lng   GetCoordinates   Address   •  Lat   •  Lng   Events   Output   OnMapClick   •  Lat   •  Lng   28  
  • 29. Technology  independent       Technology  dependent     Mashup  Execu3on     Engine   29  
  • 31. Wrapper  Types   Category   Wrapper  Types   Widget   IFrame   DIV   Data  Source   Database   Web  feed   Service   HTTP/REST   RPC   31  
  • 32. TwiCer  APIs  Wrapper  Type   Category   Wrapper  Types   Widget   IFrame   DIV   Data  Source   Database   Web  feed   Service   HTTP/REST   TwiCer  APIs   RPC   32  
  • 33. Google  Maps  Wrapper  Type   Category   Wrapper  Types   Widget   IFrame   DIV   Google  Maps   Data  Source   Database   Web  feed   Service   HTTP/REST   RPC   33  
  • 35. JavaScript  Object  Nota3on   (JSON)   MCDL   { "Interface": { "name":"", "input": [ {"name": "", "value": ""} "property":[ ] {"name":"", "value":"" }], }], "datasource_wrapper": [ "task": [ {"type":"", "name":"", {"name": "", "input": [ "description":"", {"name": "", "value": ""} "input": [ ] {"name": "", "value": "", }], "type": "" | "mime-type": ""} ], "widget_wrapper": [ "output": [ {"type":"", name":"", {"name": "", "value": "", "input": [ "type": "" | "mime-type": ""} {"name": "", "value": ""} ] ] }], }], "event": [ "mapper": [ {"name": "", "description":"", {"source" : ["ref"], "output": [ "destination" : [{"name":"ref", {"name": "", "value": "", "correspond":"ref" | "type": "" | "mime-type": ""} "template":"" | ] "parser":{ "language":"", }] "query":""}}] }, }] }} "service_wrapper": [ {"type":"", "name":"", 35  
  • 36. JSON  Schema   "input": [ "service_wrapper": [ { "Interface": { "input": [ "name":"", ""} {"type":"", "", "value": {"name": "name":"", "property":[ "input": [ "", "value": ""} ] {"name": }], ] {"name": "", "value": ""} {"name":"", "value":"" }], ] }], "datasource_wrapper": [ }], "datasource_wrapper": [ {"type":"", "name":"", "task": [ "input": [ {"type":"", "name":"", "datasource_wrapper": [ {"name": "", "input": [ "name":"", ""} {"type":"", "", "value": {"name": "description":"", ] {"name": "", "value": ""} "input": [ "input": [ }], ] {"name": "", "value": ""} {"name": "", "value": "", }], ] "type": "" | "mime-type": ""} "widget_wrapper": [ }], ], "widget_wrapper": [ {"type":"", name":"", "output": [ {"type":"", name":"", "widget_wrapper": [ {"name": "", "value": "", "input": [ name":"", {"type":"", "input": [ {"name": "", "value": ""} "type": "" | "mime-type": ""} ] {"name": "", "value": ""} "input": [ ] }], ] {"name": "", "value": ""} }], }], ] "event": [ }], "mapper": [ {"name": "", "description":"", "mapper": [: ["ref"], {"source" "output": [ {"source" : ["ref"], "destination" : [{"name":"ref", {"name": "", "value": "", "destination" : [{"name":"ref", "correspond":"ref" | "type": "" | "mime-type": ""} "correspond":"ref" | "template":"" | ] "template":"" | "parser":{ "language":"", }] "parser":{ "language":"", "query":""}}] }, }] "query":""}}] }} }] }} 36  
  • 37. Component  Meta-­‐model   Event 0..* Rule 1..* -name -description ) put +o ( out ut tio n pu tina Rule t des 0..* Mapper 1..* Wrapper destination (input) Parameter Interface -name +name -name 1..* -value source (output) -type/MIME-type 0..* 0..* sou t rce u de (in np stin pu +i u t atio t) tp n( ou 1..* +ou tpu Task t) -name 1..* -description 1..* Rule 37  
  • 38. Technology  Independent   Event 0..* Rule 1..* -name -description ) put +o ( out ut tio n pu tina Rule t des 0..* Mapper 1..* Wrapper destination (input) Parameter Interface -name +name -name 1..* -value source (output) -type/MIME-type 0..* 0..* sou t rce u de (in np stin pu +i u t atio t) tp n( ou 1..* +ou tpu Task t) -name 1..* -description 1..* Rule 38  
  • 39. Technology  Independent   { "Interface": { "service_wrapper": [ "name":"", {"type":"", "name":"", "property":[ {"name":"", "value":"" "input": [ }], {"name": "", "value": ""} ] "task": [ }], {"name": "", "description":"", "datasource_wrapper": [ "input": [ {"type":"", "name":"", {"name": "", "value": "", "input": [ "type": "" | "mime-type": ""} {"name": "", "value": ""} ], ] "output": [ }], {"name": "", "value": "", "widget_wrapper": [ "type": "" | "mime-type": ""} {"type":"", name":"", ] }], "input": [ {"name": "", "value": ""} "event": [ ] {"name": "", "description":"", }], "output": [ {"name": "", "value": "", "mapper": [ "type": "" | "mime-type": ""} {"source" : ["ref"], ] "destination" : [{"name":"ref", }] "correspond":"ref" | }, "template":"" | "parser":{ "language":"", "query":""}}] }] }} 39  
  • 40. Technology  Dependent   Event 0..* Rule 1..* -name -description ) put +o ( out ut tio n pu tina Rule t des 0..* Mapper 1..* Wrapper destination (input) Parameter Interface -name +name -name 1..* -value source (output) -type/MIME-type 0..* 0..* sou t rce u de (in np stin pu +i u t atio t) tp n( ou 1..* +ou tpu Task t) -name 1..* -description 1..* Rule 40  
  • 41. Technology  Dependent   "input": [ "service_wrapper": [ { "Interface": { "input": [ "name":"", ""} {"type":"", "", "value": {"name": "name":"", "property":[ "input": [ "", "value": ""} ] {"name": }], ] {"name": "", "value": ""} {"name":"", "value":"" }], ] }], "datasource_wrapper": [ }], "datasource_wrapper": [ {"type":"", "name":"", "task": [ "input": [ {"type":"", "name":"", "datasource_wrapper": [ {"name": "", "input": [ "name":"", ""} {"type":"", "", "value": {"name": "description":"", ] {"name": "", "value": ""} "input": [ "input": [ }], ] {"name": "", "value": ""} {"name": "", "value": "", }], ] "type": "" | "mime-type": ""} "widget_wrapper": [ }], ], "widget_wrapper": [ {"type":"", name":"", "output": [ {"type":"", name":"", "widget_wrapper": [ {"name": "", "value": "", "input": [ name":"", {"type":"", "input": [ {"name": "", "value": ""} "type": "" | "mime-type": ""} ] {"name": "", "value": ""} "input": [ ] }], ] {"name": "", "value": ""} }], }], ] "event": [ }], "mapper": [ {"name": "", "description":"", "mapper": [: ["ref"], {"source" "output": [ {"source" : ["ref"], "destination" : [{"name":"ref", {"name": "", "value": "", "destination" : [{"name":"ref", "correspond":"ref" | "type": "" | "mime-type": ""} "correspond":"ref" | "template":"" | ] "template":"" | "parser":{ "language":"", }] "parser":{ "language":"", "query":""}}] }, }] "query":""}}] }} }] }} 41  
  • 42. Wrapper  Types  Hierarchy   Wrapper I : Input O : Output T : Task E: Event -name Widget Data Source Service +style I +streaming I +endPoint I +show() T +invoke() T +mode I +hide() T +stopStreaming() T +invoke() T +restyle() T +onUpdate() E +onReceive() E DIV IFrame Database Web Feed HTTP/REST RPC +ID I +cutFrom I src +type I +frequency I src 1 +method I +type I +extScript I +cutTo I +server I +requestHeader I +inMessage I +initScript I +port I +request I +methodName I function +user I +WADL I +outMessage O event 0..* +pass I +responseHeader O 0..* +database +response O I Event Function +script +status O I +initEvent I +script I +prepare SOAP I +callback I +call T +interval 1 +WSDL I I +onEvent() E +data O +portType I 42  
  • 43. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 43  
  • 44. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 44  
  • 45. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 45  
  • 46. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 46  
  • 47. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 47  
  • 48. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 48  
  • 49. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 49  
  • 50. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 50  
  • 51. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 51  
  • 52. MCDL  for  TwiCer  API   { "Interface": { "name":"Twitter APIs", "input": [ "property":[ {"name": "", "value": ""} {"version":"1" ] }], }], "service_wrapper": [ "task": [ "datasource_wrapper": [ {"type":"HTTP/REST", {"name": "search", {"type":"", "name":"", "name":"twitter_wrapper", "description":"Allows you to search "input": [ [ "input": for tweets based on a keyword", {"name": "", "value": ""} {"name": "method", "input": [ ]"value": "GET"} {"name": "query", }], ] "value": "USI", }], "type": "String"} "widget_wrapper": [ ], {"type":"", name":"", "output": [ {"name": "tweets", "input": [ {"name": "", "value": ""} "mime-type": "JSON"} ] ] }], }], "mapper": [ "mapper": [ }, {"source" : ["ref"], {"source" : ["search.query"], "destination" : [{"name":"ref", "destination" : "correspond":"ref" | [{"name":"twitter_wrapper.URL", "template":"" | "template":"http:// "parser":{ "language":"", search.twitter.com/search.json? "query":""}}] q={search.query}" | }] }] }} }] }} 52  
  • 53. Mashup  development  requires  a  highly   abstracted,  expressive,  and   extensible  component  meta-­‐model   53  
  • 54. The  Mashup  Component   Descrip3on  Language   Saeed  Aghaee  and  Cesare  Pautasso     Faculty  of  Informa3cs   University  of  Lugano  (USI)     hCp://www.saeed-­‐aghaee.info     hCp://www.pautasso.info       54   hCp://www.jopera.org