2012.12 - eddi 2012 - workshop

283
Create Your Own Information Systems on the Basis of DDI-Lifecycle 4th Annual European DDI User Conference (EDDI 2012) 03.12.2012 Thomas Bosch M.Sc. (TUM) Ph.D. student boschthomas.blogspot.com - Leibniz Institute for the Social Sciences Matthäus Zloch M.Sc. Ph.D. student GESIS - Leibniz Institute for the Social Sc

Upload: thomas-bosch

Post on 28-Jun-2015

244 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 2012.12 - EDDI 2012 - Workshop

Create Your Own Information Systemson the Basis of DDI-Lifecycle

4th Annual European DDI User Conference(EDDI 2012)

03.12.2012

Thomas Bosch

M.Sc. (TUM)Ph.D. student

boschthomas.blogspot.comGESIS - Leibniz Institute for the Social Sciences

Matthäus Zloch

M.Sc.Ph.D. student

GESIS - Leibniz Institute for the Social Sciences

Page 2: 2012.12 - EDDI 2012 - Workshop

2

Introduction of Attendees

• What is your name? • What’s your organization?• Why are you here?

• What are you mostly interested in?• What do you expect from this tutorial?• …

Appr. 30 seconds

Page 3: 2012.12 - EDDI 2012 - Workshop

3

Goals of This Presentation

• Introduction to DDI-Lifecycle• Give a DDI Lifecycle overview • Show you (basic) elements of the DDI-Lifecycle and the main structure• How does Identification, Versioning, Maintenance work?• DDI Discovery Vocabulary “disco”• How to use the DDI Documentation

• Individual software project• Introduce you to basics of software architecture design• Show you how the software architecture of your project may look like• Show you how a software project leverages DDI and the disco model• Introduce you to a project template for using the disco model in the

back-end

Page 4: 2012.12 - EDDI 2012 - Workshop

4

Outline

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Matthäus Thomas

Page 5: 2012.12 - EDDI 2012 - Workshop

5

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

• Outlook

Page 6: 2012.12 - EDDI 2012 - Workshop

6

Outline

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Matthäus Thomas

Presentation

Business Layer

Page 7: 2012.12 - EDDI 2012 - Workshop

7

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 8: 2012.12 - EDDI 2012 - Workshop

8

Feel free to ask questions at any time!

Page 9: 2012.12 - EDDI 2012 - Workshop

9

What comes next?

• Before we start with the use-case Missy…

• Thomas, can you give us a top-level overview of DDI?• You might also include how DDI treats identification, versioning and

maintenance…

Page 10: 2012.12 - EDDI 2012 - Workshop

10

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 11: 2012.12 - EDDI 2012 - Workshop

11

DDI-L Stages

Page 12: 2012.12 - EDDI 2012 - Workshop

Study

Concepts

Concepts

measures

SurveyInstruments

using

Questions

made up of

Universes

about

Page 13: 2012.12 - EDDI 2012 - Workshop

Questions

Responses

collect

resulting in

Data Files

Variables

made up of

Categories/Codes,

Numbers

with values of

Page 14: 2012.12 - EDDI 2012 - Workshop

14

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 15: 2012.12 - EDDI 2012 - Workshop

15

Element Types

IDs must be unique within maintainablesNot identified elements are contained by other element types

Page 16: 2012.12 - EDDI 2012 - Workshop

16

Identification

Agency, ID, Version

or

URN (= Agency + ID + Version)

Page 17: 2012.12 - EDDI 2012 - Workshop

17

Referencing Maintainables

Page 18: 2012.12 - EDDI 2012 - Workshop

18

Schemes

Very often, identifiable and versionable elements are maintained in parent schemes

Page 19: 2012.12 - EDDI 2012 - Workshop

19

Maintenance Rules

Maintenance Agency • identified by a reserved code (based on its domain name; similar to it’s website

and e-mail)• Registration of maintenance agency (e.g. GESIS)

Ownership• Maintenance agencies own the objects they maintain• Only they are allowed to change or version the objects

Reference• Other organizations may reference external items in their own schemes,

but may not change those items• You can make a copy which you change and maintain, but once you do

that, you own it!

Page 20: 2012.12 - EDDI 2012 - Workshop

20

Versioning Rules

Page 21: 2012.12 - EDDI 2012 - Workshop

21

Identifiable (DDI 3.1 XML)

<DataItem id=“AB347”> …</DataItem>

Page 22: 2012.12 - EDDI 2012 - Workshop

22

Versionable (DDI 3.1 XML)

<Variable id=“V1” version=“1.1.0” versionDate=“20012-11-12”> <VersionResponsibility> Thomas Bosch </VersionResponsibility> <VersionRationale> Spelling Correction </VersionRationale> …</Variable >

Page 23: 2012.12 - EDDI 2012 - Workshop

23

Maintainable (DDI 3.1 XML)

<VariableScheme id=“VarSch01” agency =“us.mpc” version=“1.4.0” versionDate=“2009-02-12”> …</VariableScheme>

Page 24: 2012.12 - EDDI 2012 - Workshop

24

URN (DDI 3.1)

urn:ddi:us.mpc:VariableScheme. VarSch01.1.4.0:Variable.V1.1.1.0

Page 25: 2012.12 - EDDI 2012 - Workshop

25

URN (DDI 3.1)

urn:ddi:us.mpc:VariableScheme. VarSch01.1.4.0:Variable.V1.1.1.0

Page 26: 2012.12 - EDDI 2012 - Workshop

26

URN (DDI 3.1)

urn:ddi:us.mpc:VariableScheme. VarSch01.1.4.0:Variable.V1.1.1.0

Maintaining agency

Page 27: 2012.12 - EDDI 2012 - Workshop

27

URN (DDI 3.1)

urn:ddi:us.mpc:VariableScheme. VarSch01.1.4.0:Variable.V1.1.1.0

Maintainable (element type, ID, version)

Page 28: 2012.12 - EDDI 2012 - Workshop

28

URN (DDI 3.1)

urn:ddi:us.mpc:VariableScheme. VarSch01.1.4.0:Variable.V1.1.1.0

Identifiable (element type, ID, version number)

ID must be unique within maintainable

Page 29: 2012.12 - EDDI 2012 - Workshop

29

URN Resolution

• DNS-based resolution for DDI services• URN can be resolved by DNS means• http://registry.ddialliance.org/

• details and library • list of available DNS services for this DDI agency

• URNs are mapped to local URLs• XML Catalog can be used as simple resolution mechanism

Page 30: 2012.12 - EDDI 2012 - Workshop

30

(Agency, ID, Version) vs. URNOften, these are inherited from a maintainable object

Referencing (DDI 3.1)

Page 31: 2012.12 - EDDI 2012 - Workshop

31

Referencing (DDI 3.1 + 3.2)

• Internal• In same DDI Instance• (agency, ID, version)

• Maintainable (agency, ID, version)• Identifiable (ID), versionable (ID, version)

• External• To other DDI Instances• URN > (agency, ID, version)

Page 32: 2012.12 - EDDI 2012 - Workshop

32

Internal Reference (DDI 3.1)

<VariableReference isReference=“true” isExternal=“false” lateBound=“false”>

<Scheme isReference=“true” isExternal=“false” lateBound=“false”>

<ID>VarSch01</ID> <IdenftifyingAgency>us.mpc</IdentifyingAgency> <Version>1.4.0</Version> </Scheme> <ID>V1</ID> <IdenftifyingAgency>us.mpc</IdentifyingAgency> <Version>1.1.0</Version></VariableReference>

Page 33: 2012.12 - EDDI 2012 - Workshop

33

External Reference (DDI 3.1)

<VariableReference isReference=“true” isExternal=“true” lateBound=“false”>

<urn>

urn:ddi:us.mpc:VariableScheme.VarSch01.1.4.0:Variable.V1.1.1.0</urn>

</VariableReference>

Page 34: 2012.12 - EDDI 2012 - Workshop

34

Identifiers (DDI 3.2)

• Why new IDs? • better support of persistent identification (less semantics, context information)

• URN or (agency, ID, version)• Version changes?

• Administrative metadata No• Payload metadata yes

• No inheritance• Why? (implementation problems, …)

• Deprecated vs. Canonical IDs• Deprecated (no version of maintainables, colons as separators)• Mechanism for roundtrip available between DDI 3.2 canonical ID, DDI 3.2

deprecated ID, DDI 3.1 ID

Page 35: 2012.12 - EDDI 2012 - Workshop

35

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:VariableScheme. VarSch01.1.4.0:Variable.V1.1.1.0

No maintainables

Page 36: 2012.12 - EDDI 2012 - Workshop

36

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:Variable.V1.1.1.0

No maintainables

Page 37: 2012.12 - EDDI 2012 - Workshop

37

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:Variable.V1.1.1.0

Agency, ID, version (Identifiable, Versionable)

Page 38: 2012.12 - EDDI 2012 - Workshop

38

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:Variable.V1.1.1.0

ID unique in agency (not maintainable)

Page 39: 2012.12 - EDDI 2012 - Workshop

39

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:Variable.V1.1.1.0

No element types

Page 40: 2012.12 - EDDI 2012 - Workshop

40

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:V1.1.1.0

No element types

Page 41: 2012.12 - EDDI 2012 - Workshop

41

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:Variable.V1.1.1.0

Colon is separator

Page 42: 2012.12 - EDDI 2012 - Workshop

42

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:Variable.V1:1.1.0

Colon is separator

Page 43: 2012.12 - EDDI 2012 - Workshop

43

Canonical URN (DDI 3.2)

urn:ddi:us.mpc:V1:1.1.0

No maintainablesAgency, ID, version (Identifiable, Versionable)

ID unique in agency (not maintainable)No element typesColon is separator

Page 44: 2012.12 - EDDI 2012 - Workshop

44

What comes next?

• This was the DDI Overview with identification, versioning, and maintenance

• But, what is the use-case actually? • What do you want to use DDI for?

Page 45: 2012.12 - EDDI 2012 - Workshop

45

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 46: 2012.12 - EDDI 2012 - Workshop

46

General Information About Missy

• Missy – Microdata Information System

• Largest household survey in Europe• Provides detailed information about individual datasets• Currently consists of “microcensus" survey, which is

comprised of statistics about, e.g.• general population in Germany• situation about employment market

• occupation, professional education, income, legal insurance, etc.

Page 47: 2012.12 - EDDI 2012 - Workshop

47

General Information About Missy

• May be split in two parts• Missy Web (end-user front-end part)• Missy Editor for documentation (back-end part)

• Consists of approx. 500 Variables & Questions• Captures 25 years, since 1973

Page 48: 2012.12 - EDDI 2012 - Workshop

48

Missy 3

• That’s what it’s all about! The “next generation Missy”

• Integration of further surveys, e.g. EU-SILC, EU-LFS, …• Implementation of Missy Editor as a Web-Application

Page 49: 2012.12 - EDDI 2012 - Workshop

49

Use-Cases in Missy

• General Information about survey “microcensus”• Variables by thematic classification and year• List of variables by year• List of generated variables by year• Show details of a variable with statistics• Variable-Time Matrix

• List of variables by thematic classification and year (selectable)

• Questionnaire Catalogue

Page 50: 2012.12 - EDDI 2012 - Workshop

50

Use-Cases in Missy

• General Information about survey “microcensus”• Variables by thematic classification and year• List of variables by year• List of generated variables by year• Show details of a variable with statistics• Variable-Time Matrix

• List of variables by thematic classification and year (selectable)

• Questionnaire Catalogue• In future: browse by survey and country!

Page 51: 2012.12 - EDDI 2012 - Workshop

51

Use-Cases in Missy

• General Information about survey “microcensus”• Variables by thematic classification and year• List of variables by year• List of generated variables by year• Show details of a variable with statistics• Variable-Time Matrix

• List of variables by thematic classification and year (selectable)

• Questionnaire Catalogue

Page 52: 2012.12 - EDDI 2012 - Workshop

52

Page 53: 2012.12 - EDDI 2012 - Workshop

53

Page 54: 2012.12 - EDDI 2012 - Workshop

54

Page 55: 2012.12 - EDDI 2012 - Workshop

55

Page 56: 2012.12 - EDDI 2012 - Workshop

56

Page 57: 2012.12 - EDDI 2012 - Workshop

57

Requirements to Software Developers

• Complex data model to represent use-cases• Focus lies on reusability• Flexible Web Application Framework and modern architecture

• Service-oriented• Semantic Web technologies

• Creation of an abstract framework and architecture• should be well designed to be able to be extended and reusable

Page 58: 2012.12 - EDDI 2012 - Workshop

58

What comes next?

• We have seen Missy as an use-case with several fields which holds values

• I would like to use DDI• What are the main structures of DDI-L, Thomas?

Page 59: 2012.12 - EDDI 2012 - Workshop

59

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 60: 2012.12 - EDDI 2012 - Workshop

60

Page 61: 2012.12 - EDDI 2012 - Workshop

61

Page 62: 2012.12 - EDDI 2012 - Workshop

62

Modules

Page 63: 2012.12 - EDDI 2012 - Workshop

63

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

What comes next?

Page 64: 2012.12 - EDDI 2012 - Workshop

64

DDIInstance

Page 65: 2012.12 - EDDI 2012 - Workshop

65

DDIInstance

Page 66: 2012.12 - EDDI 2012 - Workshop

66

ResourcePackage

Page 67: 2012.12 - EDDI 2012 - Workshop

67

ResourcePackage

Allows packaging of any maintainable item as a resource itemStructure to publish non-study-specific materials for reuse

Page 68: 2012.12 - EDDI 2012 - Workshop

68

ResourcePackage

Any module (except: StudyUnit, Group, LocalHoldingPackage)

Page 69: 2012.12 - EDDI 2012 - Workshop

69

Any SchemeInternal or external references to schemes and elements within schemes

ResourcePackage

Page 70: 2012.12 - EDDI 2012 - Workshop

70

Group

Page 71: 2012.12 - EDDI 2012 - Workshop

71

Group

Groups allow inheritance

Page 72: 2012.12 - EDDI 2012 - Workshop

72

Group

Page 73: 2012.12 - EDDI 2012 - Workshop

73

Organization

Page 74: 2012.12 - EDDI 2012 - Workshop

74

Organization

Page 75: 2012.12 - EDDI 2012 - Workshop

75

LocalHoldingPackage

Page 76: 2012.12 - EDDI 2012 - Workshop

76

LocalHoldingPackage

• Add local content to a deposited study unit or group • without changing the version of the study unit, group

Page 77: 2012.12 - EDDI 2012 - Workshop

77

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 78: 2012.12 - EDDI 2012 - Workshop

78

StudyUnit

Page 79: 2012.12 - EDDI 2012 - Workshop

79

StudyUnit

Page 80: 2012.12 - EDDI 2012 - Workshop

80

StudyUnit

Page 81: 2012.12 - EDDI 2012 - Workshop

81

Coverage

Page 82: 2012.12 - EDDI 2012 - Workshop

82

Coverage

Page 83: 2012.12 - EDDI 2012 - Workshop

83

TemporalCoverage

Page 84: 2012.12 - EDDI 2012 - Workshop

84

TopicalCoverage

Page 85: 2012.12 - EDDI 2012 - Workshop

85

SpatialCoverage

Page 86: 2012.12 - EDDI 2012 - Workshop

86

SpatialCoverage

Page 87: 2012.12 - EDDI 2012 - Workshop

87

TopicalCoverage

Page 88: 2012.12 - EDDI 2012 - Workshop

88

TemporalCoverage

Page 89: 2012.12 - EDDI 2012 - Workshop

89

FundingInformation

Page 90: 2012.12 - EDDI 2012 - Workshop

90

FundingInformation

Page 91: 2012.12 - EDDI 2012 - Workshop

91

Citation

Page 92: 2012.12 - EDDI 2012 - Workshop

92

Citation

Page 93: 2012.12 - EDDI 2012 - Workshop

93

Citation

Page 94: 2012.12 - EDDI 2012 - Workshop

94

Citation

Page 95: 2012.12 - EDDI 2012 - Workshop

95

How the presentation is continued

• Ok, I have shown you • the main structures as well as • the main modules of DDI-Lifecycle

• If you want to use DDI you have to have a model or idea of your software architecture

• How would your software architecture look like?

Page 96: 2012.12 - EDDI 2012 - Workshop

96

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 97: 2012.12 - EDDI 2012 - Workshop

97

What makes Missy interesting

• Cross-linking between different multilingual studies• enabled by the common data model• provides different use-cases

• Missy leverages DDI as its back-end data model and exchange format

• Modern web project architecture, e.g. Multitier, MVC, etc.

• Is designed to be published as open-source project with an API to persist DDI data

Page 98: 2012.12 - EDDI 2012 - Workshop

98

Software Architecture

• Standard technologies to develop software • a multitier architecture• Model-View-Controller (MVC-Pattern)• Project management software, e.g. Maven

• Multitier architecture separates the project into logical parts• presentation• business logic or application processing• data management• persistence• …

Page 99: 2012.12 - EDDI 2012 - Workshop

99

Page 100: 2012.12 - EDDI 2012 - Workshop

100

Model-View-Controller

• separation of • representation of information• interactions with the data• components

• the key is to have logically separated parts, where people might work collaboratively

Page 101: 2012.12 - EDDI 2012 - Workshop

101

MVC – Interactions

Model

View

Controller

manipulates

accesses

controls

Page 102: 2012.12 - EDDI 2012 - Workshop

102

Model

• Represents the business objects, i.e. real life concepts, and their relations to each other

• Sometimes also includes some business logic

• Independent of the presentation and the controls

Page 103: 2012.12 - EDDI 2012 - Workshop

103

View

• Responsible for the presentation of information to the user• Provides actions, so that the user can interact with the

application

• "Knows" the model and can access it

• Usually does not display the whole model, but rather special "views" or use-cases of it

Page 104: 2012.12 - EDDI 2012 - Workshop

104

Controller

• Controls the presentations, i.e. views• Receives actions from users

• interprets/evaluates them• acts accordingly

• Manipulates the data / model• Usually each view has its own controller

• Be warned of code reuse of controllers• controllers are most often the throwaway components

Page 105: 2012.12 - EDDI 2012 - Workshop

105

View Technologies

Model

View

Controller

manipulates

accesses

controls

Page 106: 2012.12 - EDDI 2012 - Workshop

106

Data Model

Model

View

Controller

manipulates

accesses

controls

Page 107: 2012.12 - EDDI 2012 - Workshop

Missy Technologies

107

Model

View

Controller

manipulates

accesses

controls

Page 108: 2012.12 - EDDI 2012 - Workshop

108

What we have discussed so far

• Brief introduction to Missy and the use-cases• With which technologies a web application framework might

be build up today• How a modern software architecture looks like

Page 109: 2012.12 - EDDI 2012 - Workshop

109

How the presentation is continued

• What the DDI-L core modules are and how they are organized

• Introduction the disco model and• How to extend it

Page 110: 2012.12 - EDDI 2012 - Workshop

110

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 111: 2012.12 - EDDI 2012 - Workshop

111

ConceptualComponent

ConceptualComponent

Page 112: 2012.12 - EDDI 2012 - Workshop

112

ConceptualComponent

Page 113: 2012.12 - EDDI 2012 - Workshop

113

ConceptualComponent

Page 114: 2012.12 - EDDI 2012 - Workshop

114

ConceptScheme

Page 115: 2012.12 - EDDI 2012 - Workshop

115

ConceptScheme

Page 116: 2012.12 - EDDI 2012 - Workshop

116

Concept

Page 117: 2012.12 - EDDI 2012 - Workshop

117

Concept

Page 118: 2012.12 - EDDI 2012 - Workshop

118

Universe

Page 119: 2012.12 - EDDI 2012 - Workshop

119

Universe

Page 120: 2012.12 - EDDI 2012 - Workshop

120

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 121: 2012.12 - EDDI 2012 - Workshop

121

LogicalProduct

Page 122: 2012.12 - EDDI 2012 - Workshop

122

LogicalProduct

Page 123: 2012.12 - EDDI 2012 - Workshop

123

LogicalProduct

Page 124: 2012.12 - EDDI 2012 - Workshop

124

CodeScheme

Page 125: 2012.12 - EDDI 2012 - Workshop

125

CodeScheme

Page 126: 2012.12 - EDDI 2012 - Workshop

126

Code

Page 127: 2012.12 - EDDI 2012 - Workshop

127

Code

Page 128: 2012.12 - EDDI 2012 - Workshop

128

CategoryScheme

Page 129: 2012.12 - EDDI 2012 - Workshop

129

CategoryScheme

Page 130: 2012.12 - EDDI 2012 - Workshop

130

Category

Page 131: 2012.12 - EDDI 2012 - Workshop

131

Category

Page 132: 2012.12 - EDDI 2012 - Workshop

132

VariableScheme

Page 133: 2012.12 - EDDI 2012 - Workshop

133

VariableScheme

Page 134: 2012.12 - EDDI 2012 - Workshop

134

Variable

Page 135: 2012.12 - EDDI 2012 - Workshop

135

Variable

Page 136: 2012.12 - EDDI 2012 - Workshop

136

Representation

Page 137: 2012.12 - EDDI 2012 - Workshop

137

Representation

Page 138: 2012.12 - EDDI 2012 - Workshop

138

CodeRepresentation

Page 139: 2012.12 - EDDI 2012 - Workshop

139

CodeRepresentation

Page 140: 2012.12 - EDDI 2012 - Workshop

140

NumericRepresentation

Page 141: 2012.12 - EDDI 2012 - Workshop

141

NumericRepresentation

Page 142: 2012.12 - EDDI 2012 - Workshop

142

TextRepresentation

Page 143: 2012.12 - EDDI 2012 - Workshop

143

TextRepresentation

Page 144: 2012.12 - EDDI 2012 - Workshop

144

VariableGroup

Page 145: 2012.12 - EDDI 2012 - Workshop

145

VariableGroup

Page 146: 2012.12 - EDDI 2012 - Workshop

146

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 147: 2012.12 - EDDI 2012 - Workshop

147

DataCollection

Page 148: 2012.12 - EDDI 2012 - Workshop

148

DataCollection

Page 149: 2012.12 - EDDI 2012 - Workshop

149

DataCollection

Page 150: 2012.12 - EDDI 2012 - Workshop

150

Methodology

Page 151: 2012.12 - EDDI 2012 - Workshop

151

Methodology

Page 152: 2012.12 - EDDI 2012 - Workshop

152

CollectionEvent

Page 153: 2012.12 - EDDI 2012 - Workshop

153

CollectionEvent

Page 154: 2012.12 - EDDI 2012 - Workshop

154

QuestionScheme

Page 155: 2012.12 - EDDI 2012 - Workshop

155

QuestionScheme

Page 156: 2012.12 - EDDI 2012 - Workshop

156

QuestionItem

Page 157: 2012.12 - EDDI 2012 - Workshop

157

QuestionItem

Page 158: 2012.12 - EDDI 2012 - Workshop

158

Response Domain

Page 159: 2012.12 - EDDI 2012 - Workshop

159

Response Domain

Page 160: 2012.12 - EDDI 2012 - Workshop

160

Instrument

Page 161: 2012.12 - EDDI 2012 - Workshop

161

Instrument

Page 162: 2012.12 - EDDI 2012 - Workshop

162

ControlConstruct

Page 163: 2012.12 - EDDI 2012 - Workshop

163

ControlConstructScheme

Page 164: 2012.12 - EDDI 2012 - Workshop

164

ControlConstruct

Page 165: 2012.12 - EDDI 2012 - Workshop

165

Sequence

Page 166: 2012.12 - EDDI 2012 - Workshop

166

Sequence (bahavioral)

Page 167: 2012.12 - EDDI 2012 - Workshop

167

Sequence (XML)

<Sequence> <ControlConstructReference> [Q1] </ControlConstructReference> <ControlConstructReference> [Q2] </ControlConstructReference> <ControlConstructReference> [Q3] </ControlConstructReference></Sequence>

Page 168: 2012.12 - EDDI 2012 - Workshop

168

Sequence (structural)

Page 169: 2012.12 - EDDI 2012 - Workshop

169

StatementItem

Page 170: 2012.12 - EDDI 2012 - Workshop

170

StatementItem (behavioral)

Page 171: 2012.12 - EDDI 2012 - Workshop

171

StatementItem (XML)

<StatementItem> <DisplayText> statement </DisplayText></StatementItem>

Page 172: 2012.12 - EDDI 2012 - Workshop

172

StatementItem (structural)

Page 173: 2012.12 - EDDI 2012 - Workshop

173

QuestionConstruct

Page 174: 2012.12 - EDDI 2012 - Workshop

174

QuestionConstruct (behavioral)

Page 175: 2012.12 - EDDI 2012 - Workshop

175

QuestionConstruct (XML)

<QuestionConstruct> <QuestionReference> [Q1] </QuestionReference></QuestionConstruct>

Page 176: 2012.12 - EDDI 2012 - Workshop

176

QuestionConstruct (structural)

Page 177: 2012.12 - EDDI 2012 - Workshop

177

IfThenElse

Page 178: 2012.12 - EDDI 2012 - Workshop

178

IfThenElse (behavioral)

Page 179: 2012.12 - EDDI 2012 - Workshop

179

IfThenElse (XML)

<IfThenElse> <IfCondition> <Code programmingLanguage="…"> yes </Code> <SourceQuestionReference> [Q1] </SourceQuestionReference> </IfCondition> <ThenConstructReference> [Q2] </ThenConstructReference> <ElseIf> <IfCondition> <Code programmingLanguage="…"> no </Code> <SourceQuestionReference> [Q1] </SourceQuestionReference> </IfCondition> <ThenConstructReference> [Q3] </d:ThenConstructReference> </ElseIf></IfThenElse>

Page 180: 2012.12 - EDDI 2012 - Workshop

180

IfThenElse (structural)

Page 181: 2012.12 - EDDI 2012 - Workshop

181

Loop

Page 182: 2012.12 - EDDI 2012 - Workshop

182

Loop (behavioral)

Page 183: 2012.12 - EDDI 2012 - Workshop

183

Loop (XML)

<Loop> <InitialValue> <Code programmingLanguage=“Java"> i = 0 </Code> </InitialValue> <LoopWhile> <Code programmingLanguage=“Java"> i < 10 </Code> </LoopWhile> <StepValue> <Code programmingLanguage=“Java"> i = i + 1 </Code> </StepValue> <ControlConstructReference> [Q1] </ControlConstructReference></Loop>

Page 184: 2012.12 - EDDI 2012 - Workshop

184

Loop (structural)

Page 185: 2012.12 - EDDI 2012 - Workshop

185

RepeatWhile

Page 186: 2012.12 - EDDI 2012 - Workshop

186

RepeatWhile (behavioral)

Page 187: 2012.12 - EDDI 2012 - Workshop

187

RepeatWhile (XML)

<RepeatWhile> <WhileCondition> <Code programmingLanguage=“Neutral"> no </Code> <SourceQuestionReference> [Q1] </ SourceQuestionReference > </WhileCondition> <WhileConstructReference> [Q1] </WhileConstructReference></RepeatWhile>

Page 188: 2012.12 - EDDI 2012 - Workshop

188

RepeatWhile (structural)

Page 189: 2012.12 - EDDI 2012 - Workshop

189

RepeatUntil

Page 190: 2012.12 - EDDI 2012 - Workshop

190

RepeatUntil (behavioral)

Page 191: 2012.12 - EDDI 2012 - Workshop

191

RepeatUntil (XML)

<RepeatUntil> <UntilCondition> <Code programmingLanguage="Neutral"> yes </Code> <SourceQuestionReference> [Q1] </SourceQuestionReference> </UntilCondition> <UntilConstructReference> [Q1] </UntilConstructReference></d:RepeatUntil>

Page 192: 2012.12 - EDDI 2012 - Workshop

192

RepeatUntil (structural)

Page 193: 2012.12 - EDDI 2012 - Workshop

193

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 194: 2012.12 - EDDI 2012 - Workshop

194

Page 195: 2012.12 - EDDI 2012 - Workshop

195

How to extend the disco model?

Page 196: 2012.12 - EDDI 2012 - Workshop

196

What we have seen so far

• An introduction to the core DDI modules

• A short introduction to the disco-model, which covers the most important parts of DDI-Lifecycle and DDI-Codebook

Page 197: 2012.12 - EDDI 2012 - Workshop

197

How the presentation is continued

• Now that we know the data model…

• How can it be used for the Missy use-case, Matthäus?

• Can we create a mapping of the fields in the disco-model and the fields in Missy?

Page 198: 2012.12 - EDDI 2012 - Workshop

198

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 199: 2012.12 - EDDI 2012 - Workshop

199

Use-case “variable details”

Page 200: 2012.12 - EDDI 2012 - Workshop

200

Page 201: 2012.12 - EDDI 2012 - Workshop

201

Page 202: 2012.12 - EDDI 2012 - Workshop

202

Page 203: 2012.12 - EDDI 2012 - Workshop

203

Page 204: 2012.12 - EDDI 2012 - Workshop

204

Page 205: 2012.12 - EDDI 2012 - Workshop

205

Sub-Sample: • is-a Sub-Universe with the

UniverseType „subSample“Filter Statement• is-a Sub-Universe with the

UniverseType „filterStatement“

Page 206: 2012.12 - EDDI 2012 - Workshop

206

Page 207: 2012.12 - EDDI 2012 - Workshop

207

Page 208: 2012.12 - EDDI 2012 - Workshop

208

Page 209: 2012.12 - EDDI 2012 - Workshop

209

Page 210: 2012.12 - EDDI 2012 - Workshop

210

Page 211: 2012.12 - EDDI 2012 - Workshop

211

Page 212: 2012.12 - EDDI 2012 - Workshop

212

Page 213: 2012.12 - EDDI 2012 - Workshop

213

Page 214: 2012.12 - EDDI 2012 - Workshop

214

What we have seen so far

• disco-model• designed for the discovery use-case• provides object types, properties and data type properties designed

for discovery use-case

• One Missy use-case and all the data type and object properties that are covered

• The idea of how theoretically the disco can be extended

Page 215: 2012.12 - EDDI 2012 - Workshop

215

How the presentation is continued

• But, what if a project has specific requirements to the model, that are not covered by the disco model?

• How are we going to implement that?

Page 216: 2012.12 - EDDI 2012 - Workshop

216

What comes next?

• Missy – General Information• Requirements to Developers• Use-Cases in Missy

• Software Architecture• Multitier• MVC

• Missy Data Model• Extendable Data Model

• DDI-L Overview• Identification, Versioning, Maintenance• DDI-L Main Structures• DDI Instance• Study Unit

• Conceptual Component• Logical Products• Data Collection• disco-model

Presentation

Business Layer

Page 217: 2012.12 - EDDI 2012 - Workshop

217

Business Logic

Page 218: 2012.12 - EDDI 2012 - Workshop

218

Page 219: 2012.12 - EDDI 2012 - Workshop

219

Page 220: 2012.12 - EDDI 2012 - Workshop

220

disco-model API

• The disco-model implementation is designed to be extended• For one project’s individual requirements

• Speaking in MVC-pattern language: the model is separated and independent from the views and the controllers

Page 221: 2012.12 - EDDI 2012 - Workshop

221

disco-model API

• abstract classes• define the basic elements, i.e. data type and object properties, that

are provided and covered by the disco-model• may be extended, but cannot be instantiated• e.g. AbstractVariable

• model classes• represent the actual entity types of disco-model• may be instantiated and reused• e.g. Variable

Page 222: 2012.12 - EDDI 2012 - Workshop

222

disco-model API

• abstract classes• define the basic elements, i.e. data type and object properties, that

are provided and covered by the disco-model• may be extended, but cannot be instantiated• e.g. AbstractVariable

• model classes• represent the actual entity types of disco-model• may be instantiated and reused• e.g. Variable

• Implementation of the Template Pattern

Page 223: 2012.12 - EDDI 2012 - Workshop

223

Page 224: 2012.12 - EDDI 2012 - Workshop

224

Provided Types

Page 225: 2012.12 - EDDI 2012 - Workshop

225

Project specific extensions

Page 226: 2012.12 - EDDI 2012 - Workshop

226

Project Specific Extensions

• Projects may just simply use• and extend the defined classes

• Introduce new fields and methods, such as getter/setter• Change the type of existing fields when they overwrite the return type

(in Java this is only possible in case of covariant returns)

Page 227: 2012.12 - EDDI 2012 - Workshop

227

How is the presentation continued

• Now that I have the data model… and I can extend it• I just need to store my data somewhere…

• Are there any persistence mechanisms that are offered by the DDI-Lifecycle model?

Page 228: 2012.12 - EDDI 2012 - Workshop

228

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 229: 2012.12 - EDDI 2012 - Workshop

229

PhysicalDataProduct

Page 230: 2012.12 - EDDI 2012 - Workshop

230

PhysicalDataProduct

Page 231: 2012.12 - EDDI 2012 - Workshop

231

PhysicalDataProduct

Page 232: 2012.12 - EDDI 2012 - Workshop

232

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 233: 2012.12 - EDDI 2012 - Workshop

233

PhysicalInstance

Page 234: 2012.12 - EDDI 2012 - Workshop

234

PhysicalInstance

Page 235: 2012.12 - EDDI 2012 - Workshop

235

PhysicalInstance

Page 236: 2012.12 - EDDI 2012 - Workshop

236

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 237: 2012.12 - EDDI 2012 - Workshop

237

Archive

Page 238: 2012.12 - EDDI 2012 - Workshop

238

Archive

Page 239: 2012.12 - EDDI 2012 - Workshop

239

Archive

Contains persistent lifecycle eventsContains archive-specific information (archive reference, access, funding)

Page 240: 2012.12 - EDDI 2012 - Workshop

240

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 241: 2012.12 - EDDI 2012 - Workshop

241

DDIProfile

Page 242: 2012.12 - EDDI 2012 - Workshop

242

DDIProfile

Page 243: 2012.12 - EDDI 2012 - Workshop

243

DDIProfile

Describes which DDI-L elements you use in your institution’s DDI flavor

Page 244: 2012.12 - EDDI 2012 - Workshop

244

How the presentation is continued

• How can the disco-model be persisted?

and

• How can it be done in a project with individual data model elements?

• How do we do this in the Missy application?

Page 245: 2012.12 - EDDI 2012 - Workshop

245

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 246: 2012.12 - EDDI 2012 - Workshop

246

Data Storage Access

Page 247: 2012.12 - EDDI 2012 - Workshop

247

Page 248: 2012.12 - EDDI 2012 - Workshop

248

Page 249: 2012.12 - EDDI 2012 - Workshop

249

Persistence Layer – Motivation

• In a well-defined software architecture the application itself does not need to know how the data is stored

• It just needs to know the API• Methods that are provided to access and store objects• May be abstracted away from the actual implementation

• An actual implementation or strategy can just be a matter of configuration

Page 250: 2012.12 - EDDI 2012 - Workshop

250

Persistence Layer – Strategy Pattern

• Implementation of the Strategy Pattern• simple interface• actual implementations are the different strategies

• A strategy is an implementation of the actual type of persistence or physical storage, respectively• e.g. DDI-L-XML, DDI-RDF, XML-DB, Relational-DB, etc.

Page 251: 2012.12 - EDDI 2012 - Workshop

251

Page 252: 2012.12 - EDDI 2012 - Workshop

252

Modules

• disco-persistence-api• Defines persistence functionality for model components regardless of

the actual type of physical persistence

• disco-persistence-relational• Implements the persistence functionality defined in disco-persistence-

api with respect to the usage of relational DBs

• disco-persistence-xml• Implements the persistence functionality defined in disco-persistence-

api with respect to the usage of DDI-XML

• disco-persistence-rdf• Implements the persistence functionality defined in disco-persistence-

api with respect to the usage of the disco-specification

Page 253: 2012.12 - EDDI 2012 - Workshop

253

Data Access Object

• A DAO is an object that is responsible for providing methods for reading and storing of objects in our model

• A DAO is again implemented against an interface

• For each business object in the data model there exists a DAO

• Persistence strategy interface defines methods for obtaining specific DAOs (data access objects)

Page 254: 2012.12 - EDDI 2012 - Workshop

254

DAO Pattern

Page 255: 2012.12 - EDDI 2012 - Workshop

255

disco-persistence-api

• Provides an API and implementations for the disco-model

• PersistenceService• Available in the disco-persistence-api• Encapsulates the actual strategy

• Strategy can be instantiated and injected into the PersistenceService

Page 256: 2012.12 - EDDI 2012 - Workshop

256

Extendable disco-persistence-api

• But, projects have own requirements to the data model• => new business objects are included• => DAOs need to be written for reading and storing these objects• => these DAOs also have to implement the appropriate type of

persistence used by that project

• => this API has to be extendable

Page 257: 2012.12 - EDDI 2012 - Workshop

257

Extendable disco-persistence-api

• But, projects have own requirements to the data model• => new business objects are included• => DAOs need to be written for reading and storing these objects• => these DAOs also have to implement the appropriate type of

persistence used by that project

• => this API has to be extendable

• Luckily it is, because of the interface structure!• Projects only need to implement the defined methods

Page 258: 2012.12 - EDDI 2012 - Workshop

258

Page 259: 2012.12 - EDDI 2012 - Workshop

259

Page 260: 2012.12 - EDDI 2012 - Workshop

260

Missy Specific Modules

• missy-persistence-api• Defines additional persistence functionality for model components

regardless of the actual type of physical persistence

• missy-persistence-relational• Implements additional persistence functionality for model

components with respect to the usage of relational DBs

• missy-persistence-xml• Implements additional persistence functionality for model

components with respect to the usage of DDI-XML

• missy-persistence-rdf• Implements additional persistence functionality for model

components with respect to the usage of the disco-specification

Page 261: 2012.12 - EDDI 2012 - Workshop

261

What we have seen so far

• Implementation of a persistence API for the disco model• How the persistence API can be extended in individual

projects

Page 262: 2012.12 - EDDI 2012 - Workshop

262

How the presentation is continued

• How does, on the persistence level, the serialization of data stored in DDI really look like?

Page 263: 2012.12 - EDDI 2012 - Workshop

263

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 264: 2012.12 - EDDI 2012 - Workshop

264

Questionnaire - Question

Page 265: 2012.12 - EDDI 2012 - Workshop

265

Questionnaire – Question (DDI 3.1 XML)

Page 266: 2012.12 - EDDI 2012 - Workshop

266

DataCollection

Instrument IntrumentName ControlConstructReference

ControlCostructScheme QuestionConstruct QuestionReference

QuestionScheme QuestionItem QuestionItemName QuestionText

Page 267: 2012.12 - EDDI 2012 - Workshop

267

Questionnaire – Question (DDI-RDF)

Page 268: 2012.12 - EDDI 2012 - Workshop

268

Variable - SummaryStatistics

Page 269: 2012.12 - EDDI 2012 - Workshop

269

Variable – SummaryStatistics (DDI 3.1 XML)PhysicalInstance Statistics VariableStatistics VariableReference SummaryStatistic SummaryStatisticType 'Minimum' Value 10

Variable VariableName 'v1' Label 'Age'

Page 270: 2012.12 - EDDI 2012 - Workshop

270

Variable – SummaryStatistics (DDI-RDF)

Page 271: 2012.12 - EDDI 2012 - Workshop

271

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 272: 2012.12 - EDDI 2012 - Workshop

272

Relational-DB Example

Page 273: 2012.12 - EDDI 2012 - Workshop

273

Relational-DB Example

Page 274: 2012.12 - EDDI 2012 - Workshop

274

Relational-DB Example

Page 275: 2012.12 - EDDI 2012 - Workshop

275

Inheritance of PropertiesFrom Identifiable

Page 276: 2012.12 - EDDI 2012 - Workshop

276

Inheritance of PropertiesFrom abstract class

Page 277: 2012.12 - EDDI 2012 - Workshop

277

Declaration of own PropertiesOwn properties

Page 278: 2012.12 - EDDI 2012 - Workshop

278

What comes next?

• What are you going to do with the MISSY project?

• Is there ongoing work?

Page 279: 2012.12 - EDDI 2012 - Workshop

279

Outline

• Persistence Layer• Programming Interface• Types of physical data storages• Examples

• Physical Data Product• Physical Instance• Archive• DDIProfile

• DDI Serialization Examples• DDI-XML• DDI-RDF / disco-spec• Relational-DB

Data Storage Access

Data Storage

• Outlook

Page 280: 2012.12 - EDDI 2012 - Workshop

280

Outlook

• YES! There is ongoing work!

• Use the API in other projects, e.g. GESIS internal projects like StarDat

• Publish the persistence API as open-source on github

• Two presentations at IASSIST 2013• One poster at IASSIST 2013

Page 281: 2012.12 - EDDI 2012 - Workshop

281

Poster

• Shows detailed information regarding Missy• Multitier Architecture, MVC• Employed Technologies• Specific Maven Modules• Project Home

• Excerpts from disco-model and the mapping of the fields

Page 282: 2012.12 - EDDI 2012 - Workshop

282

Page 283: 2012.12 - EDDI 2012 - Workshop

283

Thank you for your attention…

• Feel free to download the sources from GitHub:https://github.com/missy-project

• Give us feedback!• Feel free to criticize!

Thomas BoschGESIS - Leibniz Institute for the Social Sciences

[email protected]

Matthäus ZlochGESIS - Leibniz Institute for the Social Sciences

[email protected]