[00:00.000 --> 00:11.000] I guess I start already because otherwise it gets boring. [00:11.000 --> 00:12.000] Hi everyone. [00:12.000 --> 00:13.000] I'm Svante Schubert. [00:13.000 --> 00:20.120] I started 99 with StarFist in Hamburg and never worked on LibreOffice core StarFist [00:20.120 --> 00:21.120] earlier. [00:21.120 --> 00:27.520] But always from the beginning, although I applied a C++, other Java-based Vaptop, we [00:27.520 --> 00:30.360] called it a web office, right? [00:30.360 --> 00:31.840] And we had two and some. [00:31.840 --> 00:37.640] The second one was when the Golden Master came in 2011, it was cancelled, everything. [00:37.640 --> 00:43.760] And this library, I'm talking about the ODF toolkit, was the core of this web office and [00:43.760 --> 00:48.960] later on a fork from Open Exchange for another web office. [00:48.960 --> 00:56.640] So I worked once at the ODF standard, which is the file format, the shot frozen runtime [00:56.640 --> 00:58.680] that you dump and send to others. [00:58.680 --> 01:03.480] And the reason of the standard is to be interoperable with other things like Microsoft Office. [01:03.480 --> 01:09.360] Microsoft is also participating in the OASIS ODFTC. [01:09.360 --> 01:15.440] Okay, so far not bringing your own laptop because everything goes faster this way. [01:15.440 --> 01:17.680] Anyway, it doesn't matter. [01:17.680 --> 01:23.720] So by the way, we are three from seven members in the OASISTC. [01:23.720 --> 01:28.720] We are three from the Document Foundation, Regina Henshel, who is very active, and Micha [01:28.720 --> 01:30.040] Stahl from Atropia. [01:30.040 --> 01:31.680] Many thanks for Atropia for joining that. [01:31.680 --> 01:36.320] And Michael is also the co-maintenor of this ODF toolkit. [01:36.320 --> 01:45.400] And yes, sorry, Dennis, bring my laptop, please. [01:45.400 --> 01:50.440] Okay, so, yes, yes, yes, yes, okay, anyway. [01:50.440 --> 01:58.680] So the ODF toolkit is basically a Java-based, and it has two main core deliverables. [01:58.680 --> 02:03.640] This is the ODF DOM, and the other thing is the validator. [02:03.640 --> 02:09.000] And yes, I know, but gosh, here we go. [02:09.000 --> 02:24.440] Sorry for the inconvenience, or it's over there, sorry. [02:24.440 --> 02:48.320] Hi, here's something, okay, sorry, okay. [02:48.320 --> 02:52.760] The one thing is the core, the ODF DOM, and the online validator is the wrapper around [02:52.760 --> 02:53.760] it. [02:53.760 --> 02:58.320] It's hosted by ODF, and it's used for validating this ODF file format. [02:58.320 --> 03:03.760] And ODF DOM, you hear it by the name, it's not only an ODF implementation, but also [03:03.760 --> 03:04.920] in DOM. [03:04.920 --> 03:09.320] And you might know this from the browsers, and that's the browser standard, the HTML [03:09.320 --> 03:14.160] standard, demand that at the runtime, the browser is accessed by the DOM API, and that [03:14.160 --> 03:19.640] is the way that JavaScript not only runs in Firefox or Internet Explorer, but that is [03:19.640 --> 03:23.480] this macros are interbubble in all browsers. [03:23.480 --> 03:26.120] And ODF doesn't have such runtime API. [03:26.120 --> 03:31.440] You have either a LibreOffice macro or Microsoft Office macro, and they do not work to each [03:31.440 --> 03:32.440] other. [03:32.440 --> 03:33.440] This is a downtime. [03:33.440 --> 03:38.800] I don't say that we need a DOM, but there's no DOM access in LibreOffice, but it would [03:38.800 --> 03:42.320] be nice to have a feature API, a high-level API. [03:42.320 --> 03:47.200] And the reason is that we have a standard, a blueprint, the OSSTC given standard, and [03:47.200 --> 03:51.560] then we have this implementation where ODF is one of them, and it's hosted by ODF. [03:51.560 --> 03:55.880] And just in a nutshell, what is the standard defining? [03:55.880 --> 03:58.600] The standard blueprint is defining the zip. [03:58.600 --> 04:02.640] If you will have an ODT document, you can exchange the suffix, and then you suddenly [04:02.640 --> 04:03.640] have a zip. [04:03.640 --> 04:08.400] And there's different parts in the specification parts, number one introduction, number four [04:08.400 --> 04:14.280] formula that's not implemented here, but the zip itself is defined in the package, like [04:14.280 --> 04:18.840] the encryption signature, and also this meta-inf manifest, which is a content table, and you [04:18.840 --> 04:23.400] will find signature XML as well, and the whole XML part is one of them. [04:23.400 --> 04:31.000] And the reason now, the high-level goal is to have a, to close the gap between the standard, [04:31.000 --> 04:35.840] the blueprint, and the limitation, like want to get away from paper because you don't want [04:35.840 --> 04:40.280] to get, oh, here, developer, here's another 500 pages of the specification or start. [04:40.280 --> 04:47.480] But the idea is to generate as much as possible documentation and most of the core by this. [04:47.480 --> 04:53.440] And yes, ease by this development, and how it's been done, because we are generating [04:53.440 --> 04:58.680] from the XML, look, there are a lot of elements of the XML, but the manifest is like a set [04:58.680 --> 05:04.920] of content table signatures, also the manifest XML, and all of these is taken away, abstracted [05:04.920 --> 05:06.680] from the developers. [05:06.680 --> 05:13.640] So we generate the DOM tree, and type DOM tree, like for each element, attribute, we have [05:13.640 --> 05:19.600] a class, and an element gives you methods to what's inserted, and the default values [05:19.600 --> 05:26.840] are extracted from the spec, so burned soonish is like you should have a constructor from [05:26.840 --> 05:29.680] all the mandatory ways of the subtree, something like this. [05:29.680 --> 05:37.040] But there's also some gap in the, let's say, digital gap in the spec, like there's some [05:37.040 --> 05:43.320] formulas in the floating text saying, oh, when attribute A is active, then the attribute [05:43.320 --> 05:49.040] B, sorry, if it's B is present, then A become active, or there's a certain value for B. [05:49.040 --> 05:53.400] And these conditions, I would love to read out and generate from it the source code, [05:53.400 --> 05:57.840] because I don't want to type it myself with thousands of attributes. [05:57.840 --> 06:02.440] Another thing that is not there, because it's a lot of things, the puzzle pieces, I would [06:02.440 --> 06:07.920] call them feature, and this should be the feature API, everybody expect there's an image, [06:07.920 --> 06:13.280] and there's a table, and this is like, even if you don't know anything about ODF, you [06:13.280 --> 06:18.320] will find another file from HTML markdown, and you have a certain assumption that if [06:18.320 --> 06:24.320] there's a table, you can insert a column, and this insert column function, yes, this [06:24.320 --> 06:31.520] change API request, that has a certain pattern of XML change, and this might and should be [06:31.520 --> 06:36.320] defined in the spec, generate even this API from it, right, so in the end it's something [06:36.320 --> 06:40.320] like this, we have a semantic layer, and this is currently not generatable, and XML layer [06:40.320 --> 06:46.800] and a package layer, and the idea is that you might exchange the semantic layer with [06:46.800 --> 06:52.960] even other file formats, like there's also a table where you can do markdown from a table [06:52.960 --> 06:55.040] insert column and markdown this way. [06:55.040 --> 06:59.920] So let me run through it a bit, of course, there's just a model and not a view, this [06:59.920 --> 07:05.200] is for Libre Vasone, and because as well that the spec is not very strict on the view, and [07:05.200 --> 07:10.680] the highlights is, we've done recently a release vote of one or two still, we've refactored [07:10.680 --> 07:16.040] a lot this code generation, and also did a release after 20 years and took over the [07:16.040 --> 07:20.320] multi schema value data, which is for loading and understanding the grammar, because we [07:20.320 --> 07:25.200] have something called real X and G, which is simpler like XSD, grammar, and from this [07:25.200 --> 07:28.560] we traverse and are able to generate as much. [07:28.560 --> 07:35.600] As in one, three upcoming release, nowish, I thought I could release it with Michael [07:35.600 --> 07:41.560] for Foster, but it was some bugs, and one at four later, why one at four later, that's [07:41.560 --> 07:48.000] the ODFTC update, really, you see, this was the last release, one or two with Son, that [07:48.000 --> 07:54.200] was really, Son was stopping staff this year, and it took a while till we made the next [07:54.200 --> 07:55.520] release for OASIS. [07:55.520 --> 08:00.880] And now we are closing on ODF, there's a link, you can click on it and see the query [08:00.880 --> 08:08.200] of the 66 issues, which are already in, and then 23 credit dates, where people can validate [08:08.200 --> 08:10.480] from, take something from it. [08:10.480 --> 08:17.800] Okay, so there's another thing, I did a project on a major data search engine, where the text [08:17.800 --> 08:24.240] in major been extracted from ODF, and I realized that there's something missing in ODF, I just [08:24.240 --> 08:29.000] for discussion after something, it's like, we don't have this ODF model in the middle, [08:29.000 --> 08:35.480] like this feature model, and then we say, okay, now I tell you, how do I do the export, [08:35.480 --> 08:40.880] how should a table look like in Markdown, and you can do cherry picking of features [08:40.880 --> 08:47.520] you like to have in your own format, like Markdown or HTML, and I realized that the [08:47.520 --> 08:52.240] whole design, we came from XML, and later we realized, we need this feature level to [08:52.240 --> 08:57.560] abstract from this thing to XML details, that this is missing. [08:57.560 --> 09:03.640] So here's some sources left, and I really, really love to discuss on some kind of this [09:03.640 --> 09:22.800] later by TB or something, thanks a lot, see you next year.