 Let me start right away. I'm Sander Schubert and I want to talk to you about the new Oriental Kit from the TDAF. It's not so new by the way. It's from some accident and joined with IDN, was a passion created and now finally joined the toolkit. So, what's the Oriental Kit about? The toolkit is not a silver or a gold. It's a tool. It's something that is definitely used for ODIF and I give you a few ODIF basics here just to know. Of course, ODIF is just a zip. If you exchange the suffix from ODIT to zip or ODIF or any suffix with, you might get the XML, the nighttime pictures and some content table that's called the manifest. Another thing that Sander Schubert is because it's just a toolkit, I mean it's about ODIF and ODIF specified and the specification is like a blueprint. It's like a cooking recipe where if we do everything right, you always get valid documents from it. So, the first tool that you might know is the Validator. It's even hosted by the GDF and you can get it out of the box as a web application archive and you can hold a command line or you can have run your local toolkit to upload your files there and validate it. So that's very useful. Other use cases, the title of the Validator is just a minor case to mention it. It's to run Excel team. It's a cell transformation and some script files directly on the ODIT. Usually they're running only on the XML but you don't have to unpack them. So it's just a fancy step that somebody just wrote once. But the main thing is to add a document and it wasn't invented as a customer wanted to have a server or a cloud that do some very fast work with Java whether or not many like to... They don't need a layout and they just want to extract data usually for translation instance or ODIT. That's usually use cases. And what's new is the coloration that is possible to be used as a background and starting with usually version 1 or 0-0 and we are allowed to release 0-9 this week actually. So what's the architecture? The architecture of the... This is the Alcazava from Arnair. But what's the architecture? What's all about? What can we do good here? So the main thing that we... I think a very good thing where the ODIT stands out from others is the ODIF DOM which is being generated with a lot as much as possible from a specification. And I will not dive into it because I think we can even improve and get better results there from the generation but even improve the specification. So if we just take a look at the other source code generator. I dive into this now. The source code generator consists of, let's say, three parts. The first part is the grammar which tells you what XML is allowed and what part. Since the office body has to be there and there has to be a text file, there has to be children code, child code, office text and so on. But it's quite complicated. So 18,000 lines of code and 600 elements and 1,200 XML attributes. So it's a lot of things. So we thought it might be good if we generate some Java code to DOM type, DOM code so developers can just look at the source code by auto completion and know how they can create the XML that is allowed. And to do so, we loaded the XML into a grammar reader. We didn't want to invent our own reader so we reused some of the software and the nice thing about this is it can read many grammars. So we reused the XML multi-schemer validator for reading it and then of course we wanted to write from that, that's the data, and from that we wanted to create Java sources. And for this, we used a template manager. Usually they created HTML files on databases of that velocity. Template agent means you write the Java base class and then there's some Java code and context it just like loose and conditions so you can create arbitrary files. This just happens once in compile time, but this was not sufficient. For instance, when there was a question, is a paragraph, can a paragraph be nested? So it's possible that in any other document a text P can be found somewhere beyond because usually a document is basically just a sequence of either tables or paragraphs. So this is very hard to tell because when you look at the source code this is like, it's very small, but this is just a table. It's going on and on and there are all links or something. So what we would do then, or what I took over across, I dive into that and loaded this into a graph database. You can't see so much, but it looks like a star thing and a star picture. But what I did is, from the Moody schema of my data I loaded the graph database to answer the question, is the table can be nested because then I just dive a little bit into it. Here the red are the attributes of the table and it's just the XML table table with children XML elements and all in between. This should not be much, but we can dive further on and this is also hard to read. For instance, it's nothing and if it's choice, nothing, then it's optional and we can remove the boilerplate and have sequence like saying there can be a soft break, but there have to be a table roll. But ahead of that might be a soft break. This is what can be read here. And from that you can generate your source code. So if somebody, for instance, enters a soft page break then the source code should automatically check if there's already a text table roll inserted otherwise in front of it, if it's otherwise. Or otherwise, that's what we have to say. Because there's a rudiment, children, there's a tree and you can traverse trees quite easily so you can have a graph and a data structure quite easily and you can answer yourself these questions and share these questions with others. Otherwise you just take a look at this very huge text file. So that's the new thing since 1.00 I inserted some patched-in graph and just to get a better instruction, a better feeding for the data but I haven't answered the next question yet but I haven't improved the generation-lighted sequence what I've sorted out before is still only handwritten. If you use it at this point, a soft page break will be abandoned unless somebody did it manually. So this is the source code generator. Just imagine it, that's what we have. And to continue the picture, that's the validator. It's using the only FDOM and the XLT runner. The thing that is running the XLT from the script. The simple API there was some IDM for that was joined again but so much duplicating code that we just simply got it because I didn't support it and I don't read all that. We decided that it's time to drop something. So that's the basic architecture. To put it in a different way for the API, we have three layers which are very similar to the specification. There's one specification only for the package. It specifies the zip and not encrypted inside. It could be reused by PDIF or the 1 and 0 specification of the package which was used by EPUB by the way. Unfortunately they fought for the next version. The next one is only about the XML. The next thing which is, I don't think I'm going to specify, is the user semantic of the structure because we all know there's a table, we all know there are comments and we know that we all interpret this paragraph and make text bold. But although we are doing this at every only FDOM and also other applications like DocBook, there's no common sense on it. I wish once a user said, I'll get away with the XML. I don't care about the XML. I just want to work on the semantic level. I want to say open the text document at the paragraph, at the text, and I'm totally fine with that. So my wish in the future is to make this more a private layer like an implementation detail that's only F. But on a higher level, it's a very common sense about the things that the user has known. Just keep in mind that the semantic layer is some of this unspecified. But the nice thing is, with the graph, you can now annotate and mark things like a table. You can express the point of what X amount belongs to like a puzzle piece to different semantics. Why do we need this? First of all, why do we have a problem? Let me say, we have a problem of collaboration. We heard from an online set, the name gives a hint. It's only working online. Why is it only working online? Why is that problem? So the software comes from the 80s. In the 80s, there's only one person working on a machine. We were exchanged at four, which is sometimes a bit of a problem. It was everything working fine. We were loaded with full documents, saved with full documents. Yes, that's fine. But nowadays, we have smartphones. So we, ourselves, have multiple machines, smartphone, laptop, and we want to exchange documents. And if you want to have one through final document, like this is my application, or this is my contract, or this is the thing we all agree upon, then you have to take the others' copies and merge them back. So software development. There's one single repository where you commit your changes, but you work on your local copy. But we have a merge problem, because the key question is, if you merge it, you want to take one thing, you have to ask, what have you changed? But there's no way that we can explain it, because we only have the full final document. We only have the zip call source document repository. And we're currently, as we're cooperating as cloud, as source cloud developers were zipping their GitHub and giving them to the other by email and saying, okay, now you can add it, and it doesn't work out. It's still being paid for. So what we want is, we want to exchange changes. We want to like and commit diffs of libraries, but that library doesn't work for us, because we have XML, we have Sydney, it's horrible. So we have to go to a different fraction level here, and that's the semantic that I talked earlier about. So the question is, how, what have you changed? This can be answered by, by defined changes of editing, deletion, and modifying of these semantic things. Like the sleeper office now have a new second paragraph, and it's dispatched to other people, and it just dispatched to change, like it would change dispatched to commit, and would not zip the full document or the source repository. Or the, the work would now say, it's an only have to change right, oh, I make the fourth paragraph blue, and they would now merge everything, and it would go with the same copy of the same, yeah, they would have unified copy of a single document that is identical. Three documents copies that I think are, I think. Okay, anyway. So, wouldn't it be nice if this was working? And there's something, I tried to release a beta this week as well. I think I've worked about three, more than three years on this, and others as well. I was trying to put a prototype font to finish this, and started working with opening change on that, and it's very simple. I'll do this as a black number to green box, and you put in a document, and it's been transformed to a sequence of changes, like a user would have added the document thing by thing from the top to the bottom. Okay, but why do we need this? Because, as I said, the main question is why have you changed? And this is entering a change in the document into the real changes. By the way, it's just CLS and JSON, and the next thing is, you can also merge things back. Okay? So, we have something now, a black box, and a tool we have to look at the upcoming version, where we can just patch changes on all the F level, right? Well, we have defined the semantics things. And so, why is this good for? Because, if we have this on the back end, we can make any arbitrary application editor and all the F location. So, let's start with the graph, but let's start with Emacs. Emacs is a text editor. Who knows Emacs? Emacs? Okay, I don't know who knows Emacs. Where you got this? Anyway, Emacs, just text, okay? Well, think about it. Think about every line is a paragraph, and, obviously, they have text. You can load any full 32 document like specification or your contract, but only the... You use it on the back end, and you get all the changes, but you only move the changes to the text and the paragraph to the editor, right? And every change now is being tracked and merged back into the full document without breaking any of the features that exist. In other words, you can add a full feature document with Emacs without destroying it. Right? Well, remember, our way is to load the document fully in the document into the model, right? And filtering all the features we don't know, unfortunately. And, later, we save everything. And this is also a whole 80 pages document, or two hundred pages, and save it. I can't save it because I don't know how to save my data, and it took so long, and it's ridiculous to save always everything, right? So, this is basically what I told in Tokyo, but I did a little work, and I did a little exam, just a little exam, okay? So, there's some that editor called the CK Editor 5. It's just an HTML editor, and you can clone it and build it, but you can take a look at the example. And the notes, by the way, it's a little snippet that you might add to the index at an HTML, because these guys are from Warsaw, Poland. And, last year, I took a G-Bot, built in Warsaw, met them a day, we talked a lot, and they gave me the hints how to listen to some events to get their events there, because one thing is very special, the CK Editor 5, because from four to five, they changed their internal model. They said, we have so much problem with correlation and change tracking on the video. We moved from the full-featured document to a list of changes. So, they know changes, they are aware of changes, and they felt, wait, that's cool. All I have to do is get the changes and translate it to my changes, because they all know the same thing like paragraphs, changes, so on. But I'm very, in the beginning, just a second, please. So, I should be. I'm just listening and looking at what they're doing. So, this is the CK Editor 5, okay? And when you download and build it, you get something like this. I just edited the very old sample, and if you, this is the Chrome, you go to F12, you got the console, right? And I should be. And when I press here number one, you see there's something coming up. And I also go for image. So, I make two operations, and there's something happening over there. They collect the operations, okay? So, let me first show you the solution. This is the engine thing. I have it in my lock here. You just have to enter this here somewhere. Yes, I have to do it in JavaScript myself. But this is quite easy, and I assist you if you want to, but you can play around and see, so this lies again, because I just record what I just did. So, you see, there's a lot of, let's say why not play, but I'm not interested. But I'm interested in, I inserted, oh, I inserted nothing. Sorry, it wasn't one. Okay, that's the data that I inserted. It's called, it's an operation, and it's better positioned, zero to six. They start, obviously, counting with zero. This was the first paragraph, the seventh sign. In my world, I do it like XML. When we say the fifth thing, we take the five, right? It's more human sense. So anyway, we have to translate these operations and all the F operations. Yes, and here's the other one. They start at the fourth character and at the eighth character, it may be time, okay? So, this is something that I can really deal with. So, the next thing what I'm doing is I'm buying a building plugin and collecting all the data and send it to a local or a cloud server with my production line, okay? And now, with this, I can even load a full OTF document into this editor. I can see only what the editor is aware of, right? I can add it and merge it back and it will not break the document. And I have a standalone open source editor. And yes, I can even work offline because then I can put kitten here, big M, for instance. This needs some work and broken branches and yeah, that is something that Cora Online is missing, the symmetric level on this page and this changes. And hopefully, there have been some guy who have been done a Leero office, a Leero office doing this as well. So, I'm coming to that as well. There's some website for the OVF toolkit. This is basically the core part of that. There's the usual guitar thing, the main branch, whatever. We push something, it's getting out. The sources are here. The latest sources, please catch me because I'm working on another branch currently yet. So, the changes are not yet there, right? But they will be hopefully another week within 100 meter. And yes, well, the differences in the specification documents, there you find even the XML schemers and the HTML documentation. It's quite easy to find things. So, yes, I think that was all. That was. Okay, thank you for the same. Questions? I have a question. I'm thinking about the usage of such tool kit. Is it possible to check certain tags in the OVF format? For example, if I want to know what I teach students to generate a document with certain styles or certain features and when they get the files back to me, I need to check one by one. But is it possible to check certain tags so that I know that, yes, they use the style or something like that? Yes, so the question was, is it possible that students are using certain tags in an OVF document that would indicate the parts that they had been edited, right? So, it is definitely possible to use it. The thing is, if you use currently deeper office, I believe, if you need to do some tricks, otherwise, as I said, everything is noted into existing model. And if your tags are not existing in the model of deeper office, they will be dropped. So, the workaround that's currently working is use certain character styles. That's what we are using in the audio specification to extract default variables, right? They are only written once in the specification and by X17 we extract them to get them for the generation of the source code, yes? So, you can do it by styles and you even can, if you use, for instance, if this will be working with the CKID file, for instance, then you can tell me the changes there, right? You would know exactly what the students have changed on offer view for us in that date. And then you can take a look at these changes and say, oh well, you use different format, okay, or you can take a look at this. This will be very nice and coming back to the original idea of this text, the text, that's the way how the common companies are using the latest toolkit for temperature generation, right? I guess the most commercial use case, I don't know, well, is using templates with certain text within it and they find it by a certain field or anything and then they insert some, usually they insert some data from the database and generate some, okay? But we can talk later and go more into detail but I think it's possible, yes. Any further questions? No. Okay, I've got a few minutes left. Got a question. Michael, Michael. So, what do you think, is it possible to get the semantics somehow, and what do you think is all, to everyone, but Michael's the one who's working in this DC, right? I think the audio specification is under-specified in terms of this semantic level, okay? So, you know, there's just a few bunch of people working on it, just a few bunch, but they are part-working and there's a lot of work. So, if I come up and say thank you guys, by the way, there's a whole layer under-specified, semantics, like, we need to define what is a table, right? And we also have to define what can be changed in a table, like, into the row, into the column, into the cell range, you can make it bold, blue, something, right? So, like, we define an ODF semantic user API and also the way how the API is being mapped to the XML change, okay? Because every time I do it at table number three and in the row at number four, right, the XML should be normalized, the same, okay? So, because it only works when we dispatch changes and change changes, if we can agree on how our document looks in there, they have to look the same way. If I say to you, the millions of paragraphs read the background color, yes, then you do it in a way that is totally defined, okay? And somehow we, hopefully, we can do it with a little automation, right, like the clear mechanism. With writing it by manually, it would be horrible, right? It's too many attributes, too many XML to get on the semantic level, but we need it because otherwise we're just simply sourcing all the toys and checking those instead of doing real collaboration. So, do you think there's any way to do that? I'm not sure I understand your question, but I think the answer is that it was previously auto-scoped. Okay, so Michael answered that, if he answered my question, if he answered the correct question, it's auto-scoped, okay? It was auto-scoped. It was auto-scoped. We can decide to make it in-scoped. We haven't done that yet. You realize that that was not at the active members of the DC currently, still I'm the subcommittee chair of the advanced download operation, and I thought myself, if there's no application coming to the subcommittee and helping to define this, I do the other way around. I write some toolkits where any editor can suddenly become a whole new application, like Emacs, okay? Emacs might not have the Emacs community, but a lot, rather than the thing. But, like seeing that in 5, it's quite handy to embed any editor of OVF 2.0 to write, so I find it's quite appealing. Okay, I think I'm running out of time. Thank you for listening. Let's meet later. Have a chat. Bye-bye.