Testimonials
Publication Office portals using Cellar data
EUR-Lex
EUR-Lex is the online entry to search and retrieve EU Legal publications. The website and its content is available in all of the EU’s 24 official languages and is updated daily.
Cellar is the storage base of EUR-Lex, from where EUR-Lex retrieves the EU Legal publications and their metadata.
Which are the publications that EUR-Lex provides access?
- Treaties
- Legal acts
- Case-law
- Other legal publications
How EUR-Lex uses Cellar data?

- Each publication in EUR-Lex is identified by a CELEX number. In Cellar, this publication is also identifier by the same CELEX number and also at least a unique cellar identifier. Both, can be used to retrieve the publication in Cellar (see Cellar data for details).
- For each publication page, EUR-Lex includes links to retrieve in Cellar the publication in each available language and format (see publications for details).
- For each publication page, EUR-Lex includes a link to retrieve from Cellar the XML notice associated to this publication (see metadata notices for details).
OP Portal
OP Portal is the online entry to search and retrieve EU general publications and other types of publications and data.
OP Portal retrieves the EU general publications and their metadata from Cellar.
Which are the publications that OP Portal provides access?
- General publications
- Legislation in force
-
Master data
-
EU Whoiswho
-
Publications and data, outside of Cellar.
How OP Portal uses Cellar data?

- For each publication page, OP Portal includes links to retrieve in Cellar the publication in each available language and format (see publications for details).
- For each publication page, OP Portal includes a link to retrieve from Cellar the RDF notice associated to this publication (see metadata notices for details).
USERS
Users
Who are Cellar's users?
Cellar users are:
- The EU institutions and agencies that store their publications and associated metadata in Cellar (such as such as European Parliament, the Council of the European Union, the European Commission, the Court of Justice, etc.)
- Data (re)users, such as:
- (Re)users and systems coming from the EU institutions and agencies, but also other users, such as academic and research institutions, publishers, Member States, legislators and Courts etc. These users can search and retrieve publications and their associated metadata directly from Cellar.
- Information systems of the Publication Office of the EU (such as EUR-Lex and OP Portal presented below) that retrieve publications and their associated metadata from Cellar and offer a dedicated interface to search and display them.
Publication Office portals using Cellar data
EUR-Lex
EUR-Lex is the online entry to search and retrieve EU Legal publications. The website and its content is available in all of the EU’s 24 official languages and is updated daily.
Cellar is the storage base of EUR-Lex, from where EUR-Lex retrieves the EU Legal publications and their metadata.
Which are the publications that EUR-Lex provides access?
- Treaties
- Legal acts
- Case-law
- Other legal publications
How EUR-Lex uses Cellar data?

- Each publication in EUR-Lex is identified by a CELEX number. In Cellar, this publication is also identifier by the same CELEX number and also at least a unique cellar identifier. Both, can be used to retrieve the publication in Cellar (see Cellar data for details).
- For each publication page, EUR-Lex includes links to retrieve in Cellar the publication in each available language and format (see publications for details).
- For each publication page, EUR-Lex includes a link to retrieve from Cellar the XML notice associated to this publication (see metadata notices for details).
OP Portal
OP Portal is the online entry to search and retrieve EU general publications and other types of publications and data.
OP Portal retrieves the EU general publications and their metadata from Cellar.
Which are the publications that OP Portal provides access?
- General publications
- Legislation in force
-
Master data
-
EU Whoiswho
-
Publications and data, outside of Cellar.
How OP Portal uses Cellar data?

- For each publication page, OP Portal includes links to retrieve in Cellar the publication in each available language and format (see publications for details).
- For each publication page, OP Portal includes a link to retrieve from Cellar the RDF notice associated to this publication (see metadata notices for details).
Testimonials
The following has evaluated to null or missing:
==> jsonimg.groupId [in template "10157#10197#10161502" at line 272, column 68]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign urlJsonImg = urlJsonImg + jso... [in template "10157#10197#10161502" at line 272, column 33]
----
1<link rel="stylesheet" href="/o/OPPortalEE/external/OwlCarousel/owl.carousel.min.css" />
2<link rel="stylesheet" href="/o/OPPortalEE/external/OwlCarousel/owl.theme.default.css" />
3<style>
4.owl-item > div:after {
5 font-family: sans-serif;
6 font-size: 24px;
7 font-weight: bold;
8}
9
10
11.owl-item img {
12 transition: 0.45s;
13}
14
15.speakerB {
16 background-image: url("data:image/svg+xml,%3Csvg width='376' height='1' viewBox='0 0 376 1' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cline x1='0.200195' y1='0.5' x2='375.2' y2='0.5' stroke='%23DDDDDD'/%3E%3C/svg%3E%0A");
17 content: " ";
18 background-size: contain;
19 background-position: center;
20 background-repeat:no-repeat;
21 margin-bottom: 16px;
22}
23
24
25.speaker {
26 width: 60px;
27 height: 60px;
28 overflow: hidden;
29 border-radius: 50%;
30 margin:0 auto;
31 /* float: left;
32 margin: 5px 10px 5px 40px;*/
33}
34
35.speaker img {
36 height: 100%;
37 -webkit-transform: translateX(-50%);
38 transform: translateX(-50%);
39 margin-left: 50%;
40 transition: all ease-in-out 0.3s;
41}
42
43.owl-item.active.center img {zoom:1; }
44
45h3.testimonial-title {
46 width: 100%;
47 float: left;
48 text-align: center;
49 font-style: normal;
50 font-weight: bold;
51 font-size: 16px;
52 color: #003399;
53 overflow-y: hidden;
54 line-height: 16px;
55 height: 32px;
56}
57
58
59p.subtitle {
60 width: 100%;
61 float: left;
62 text-align: center;
63 font-size: 13px;
64 color: #757575;
65 line-height: 18px;
66 height: 36px;
67 overflow-y: hidden;
68}
69
70p.description {
71 font-style: normal;
72 font-weight: normal;
73 font-size: 14px;
74 line-height: 22px;
75 color: #444444;
76 text-align: center;
77 overflow-y: hidden;
78 height: 44px;
79}
80
81.quoteTop {
82 content: " ";
83 width: 100%;
84 background-image: url("data:image/svg+xml,%3Csvg width='376' height='31' viewBox='0 0 376 31' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cline x1='0.200195' y1='14.5' x2='375.2' y2='14.5' stroke='%23DDDDDD'/%3E%3Ccircle cx='187.7' cy='15.5' r='15.5' fill='%23DDDDDD'/%3E%3Cpath d='M189.977 22.1013C191.303 21.1579 192.28 20.365 192.909 19.7224C194.003 18.6013 194.55 17.5486 194.55 16.5642C194.55 16.2361 194.461 15.9968 194.283 15.8464C194.105 15.696 193.914 15.6208 193.709 15.6208C193.244 15.6892 192.937 15.7234 192.786 15.7234C191.897 15.7234 191.159 15.4226 190.571 14.821C189.983 14.2195 189.689 13.4333 189.689 12.4626C189.689 11.3689 190.011 10.5076 190.653 9.87864C191.296 9.23607 192.137 8.91478 193.176 8.91478C194.393 8.91478 195.404 9.35228 196.211 10.2273C197.018 11.1023 197.421 12.3122 197.421 13.8572C197.421 16.0447 196.525 18.0613 194.734 19.907C193.668 20.987 192.246 22.0261 190.469 23.0242L189.977 22.1013ZM178.738 22.1013C179.996 21.2263 180.946 20.4675 181.589 19.8249C182.737 18.6765 183.312 17.5964 183.312 16.5847C183.312 16.3113 183.243 16.0788 183.106 15.8874C182.956 15.7097 182.744 15.6208 182.471 15.6208C182.02 15.6892 181.719 15.7234 181.568 15.7234C180.666 15.7234 179.921 15.4226 179.333 14.821C178.745 14.2195 178.451 13.4128 178.451 12.4011C178.451 11.4714 178.745 10.6579 179.333 9.96068C179.935 9.26341 180.81 8.91478 181.958 8.91478C183.079 8.91478 184.063 9.32493 184.911 10.1452C185.759 10.9656 186.183 12.1824 186.183 13.7956C186.183 15.9831 185.328 17.9792 183.619 19.7839C182.553 20.905 181.09 21.9851 179.23 23.0242L178.738 22.1013Z' fill='white'/%3E%3C/svg%3E%0A");
85 height: 31px;
86 background-position: center;
87 background-repeat: no-repeat;
88}
89
90.owl-item .item {
91 padding: 20px;
92 border: 1px solid #C4C4C4;
93 margin-left: 20px;
94 Margin-right: 20px;
95 min-height: 100%;
96 height: 100%;
97 display: inline-block;
98 width: 80%;
99}
100
101/*.owl-carousel .owl-stage-outer {
102 height:225px;
103}
104*/
105.owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {
106 background: #666666;
107}
108
109.owl-theme .owl-dots .owl-dot span {
110 width: 15px;
111 height: 15px;
112 border: 1px solid #666666;
113 background: #fff;
114}
115
116.fa-angle-left:before {
117 content: " ";
118 width: 56px;
119 display: block;
120 background-image: url("data:image/svg+xml,%3Csvg width='56' height='56' viewBox='0 0 56 56' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M35.2002 11.5L23.2002 26.5L35.2002 41.5' stroke='%23666666' stroke-width='7' stroke-miterlimit='10'/%3E%3C/svg%3E%0A");
121 height: 56px;
122 background-position: center;
123 background-repeat: no-repeat;
124}
125
126.fa-angle-right:before {
127 content: " ";
128 display: block;
129 width: 55px;
130 background-image: url("data:image/svg+xml,%3Csvg width='55' height='56' viewBox='0 0 55 56' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20.2002 44.5L32.2002 29.5L20.2002 14.5' stroke='%23666666' stroke-width='7' stroke-miterlimit='10'/%3E%3C/svg%3E%0A");
131 height: 56px;
132 background-position: center;
133 background-repeat: no-repeat;
134}
135
136
137
138.faArrow {
139 font-family: 'FontAwesome';
140 font-size: 40px;
141 line-height: 60px;
142 margin-top: -30px;
143 position: absolute;
144 top: 50%;
145 text-align: center;
146 width: 60px; height: 60px;
147}
148.owl-next,
149.owl-prev {
150 position: absolute;
151 top: 115px;
152 height: 55px;
153 width: 55px;
154}
155.owl-next {
156 right: 31.5%;
157}
158.owl-prev {
159 left: 27.5%;
160}
161
162.fa-angle-left { left: 0; }
163.fa-angle-right { right: 0; }
164
165.owl-theme .owl-nav [class*='owl-']:hover {
166 background: unset !important;
167}
168
169.owl-carousel .owl-stage {
170 padding-top: 35px;
171 padding-bottom: 40px !important;
172}
173
174.owl-item.active.center {
175 transform: scale(1.2) !important;
176 margin-right:-8px;
177}
178@media (max-width: 991.5px){
179 .owl-prev {
180 left: 15.5%;
181 }
182 .owl-next {
183 right: 20.75%;
184 }
185
186}
187
188@media (max-width: 767.5px) {
189 .owl-item.active.center {
190 transform: none !important;
191 }
192
193 .owl-item .item {
194 width: 90%;
195 }
196
197 .owl-next {
198 right: -45px;
199 }
200
201
202 .owl-prev {
203 left: -35px;
204 }
205}
206
207.owl-carousel .owl-dots.disabled, .owl-carousel .owl-nav.disabled {
208 display: block;
209}
210
211.owl-carousel.owl-drag .owl-item {
212 transition: 900ms;
213}
214
215.owl-carousel .active button.owl-dot,
216.owl-carousel button.owl-dot:hover{
217 background-color: #869791;
218}
219
220.owl-carousel button.owl-dot {
221 color: inherit;
222 padding: 0!important;
223 font: inherit;
224 border: 1px solid #666;
225 background: #fff;
226 width: 15px;
227 height: 15px;
228 margin: 5px 7px;
229 -webkit-backface-visibility: visible;
230 transition: opacity 200ms ease;
231 border-radius: 30px;
232}
233
234.owl-theme .owl-dots .owl-dot span {
235 display:none;
236}
237
238.owl-stage .owl-item:nth-child(3) {
239 transform: scale(1.2);
240}
241
242.owl-item.active:not(center) {
243 transform: scale(1) !important;
244}
245
246
247</style>
248
249<div class="testimonial-slider-container carousel-wrap" >
250 <div class="owl-carousel owl-theme" id="testimonial-slider" style="">
251
252
253 <#if entries?has_content>
254 <#list entries as curEntry>
255 <#assign curEntry = curEntry />
256 <#assign assetRenderer = curEntry.getAssetRenderer() />
257 <#assign className = assetRenderer.getClassName() />
258 <#assign article = assetRenderer.getArticle() />
259 <#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContent()) />
260
261 <#assign rootElement = docXml.getRootElement() />
262 <#assign availableLocales = rootElement.attribute("available-locales").getText() />
263 <#assign defaultLocale = rootElement.attribute("default-locale").getText() />
264
265 <#if article.isApproved() >
266 <#assign articleId = article.getArticleId() />
267
268 <#assign authorName = docXml.valueOf("//dynamic-element[@name='AuthorName']/dynamic-content[@language-id='"+defaultLocale+"']/text()") />
269 <#assign img = docXml.valueOf("//dynamic-element[@name='Picture']/dynamic-content[@language-id='"+defaultLocale+"']/text()") />
270 <#assign jsonimg = jsonFactoryUtil.createJSONObject(img)>
271 <#assign urlJsonImg = "/documents/" >
272 <#assign urlJsonImg = urlJsonImg + jsonimg.groupId >
273 <#assign urlJsonImg = urlJsonImg + "/" + jsonimg.fileEntryId >
274 <#assign urlJsonImg = urlJsonImg + "/" + jsonimg.name >
275 <#assign urlJsonImg = urlJsonImg + "/" + jsonimg.uuid >
276
277 <#if (availableLocales?contains(locale)) >
278 <#assign jobPosition = docXml.valueOf("//dynamic-element[@name='JobPosition']/dynamic-content[@language-id='"+locale+"']/text()") />
279 <#assign institutionName = docXml.valueOf("//dynamic-element[@name='InstitutionName']/dynamic-content[@language-id='"+locale+"']/text()") />
280 <#assign description = docXml.valueOf("//dynamic-element[@name='Description']/dynamic-content[@language-id='"+locale+"']/text()") />
281 <#else>
282 <#assign jobPosition = docXml.valueOf("//dynamic-element[@name='JobPosition']/dynamic-content[@language-id='"+defaultLocale+"']/text()") />
283 <#assign institutionName = docXml.valueOf("//dynamic-element[@name='InstitutionName']/dynamic-content[@language-id='"+defaultLocale+"']/text()") />
284 <#assign description = docXml.valueOf("//dynamic-element[@name='Description']/dynamic-content[@language-id='"+defaultLocale+"']/text()") />
285 </#if>
286
287 <div class="item" data-dot="<button role='button' class='owl-dot' aria-label='Go to slide ${curEntry_index + 1}'><span></span></button>" style="">
288 <div class="quoteTop"></div>
289 <div class="testimonial">
290 <p class="description" style="">${description}</p>
291 <div class="speakerB"><div class="speaker">
292 <img alt="${authorName}"
293 src="${urlJsonImg}">
294 </div>
295 </div>
296
297
298 <h3 class="testimonial-title">${authorName}</h3>
299
300 <p class="subtitle" style="">${jobPosition} / ${institutionName}</p>
301 </div>
302 </div>
303
304 </#if>
305
306 </#list>
307 </#if>
308
309
310
311
312</div>
313</div>
314<script src="/o/OPPortalEE/external/OwlCarousel/owl.carousel.min.js" ></script>
315<script>
316$(document).ready(function(){
317
318// banner owl carousel
319$(".owl-carousel").owlCarousel({
320 dots: true,
321 dotsData: true,
322 slideTransition: 'linear',
323 smartSpeed:600,
324 items : 3, // THIS IS IMPORTANT
325 responsive : {
326 320 : { items : 1 }, // from zero to 480 screen width 4 items
327 375 : { items : 1 }, // from zero to 480 screen width 4 items
328 425 : { items : 1 }, // from zero to 480 screen width 4 items
329 768 : { items : 2 }, // from 480 screen widthto 768 6 items
330 1024 : { items : 3 // from 768 screen width to 1024 8 items
331 }
332 },
333 loop: true,
334 nav: true,
335 center: true,
336 responsiveClass:true,
337 navText : ['<i class="faArrow fa-angle-left" aria-hidden="true"></i>','<i class="faArrow fa-angle-right" aria-hidden="true"></i>'],
338 autoplay: false
339 });
340
341 $( ".owl-prev" ).attr( "aria-label", "Previous testimony" );
342$( ".owl-next" ).attr( "aria-label", "Next testimony" );
343
344});
345
346/* $('.owl-carousel').owlCarousel({
347 items : 1, // THIS IS IMPORTANT
348 responsive : {
349 480 : { items : 1 }, // from zero to 480 screen width 4 items
350 768 : { items : 2 }, // from 480 screen widthto 768 6 items
351 1024 : { items : 3 // from 768 screen width to 1024 8 items
352 }
353 },
354 loop: true,
355 margin: 10,
356 nav: true,
357 center: true,
358 navText : ['<i class="fa fa-angle-left" aria-hidden="true"></i>','<i class="fa fa-angle-right" aria-hidden="true"></i>'],
359 autoplay: false,
360 autoWidth:true,
361 autoplayHoverPause: true,
362}); */
363/*$(document).ready(function(){
364 $('.owl-carousel').owlCarousel();
365
366});*/
367</script>