This presentation discusses ODD (One Document Does All), which is a TEI document format that allows users to define customized data models. The presenter has been using ODD for 4 years to develop linguistic resources for Frisian. The presentation covers what ODD is, how it can be used to generate validation schemas, documentation and processing models. It also discusses using ODD in development pipelines with Maven and how ODD's can inherit from each other. The presenter concludes that while ODD has some complexity, it enables reliable build processes and development of reusable libraries at the Fryske Akademy.
Eduard Drenth presents the work done over 4 years at the Fryske Akademy to develop online Frisian dictionaries and language services. They created a strict TEI-based data model, generic code for querying and transforming dictionary data, and applications including a JSON service and web app. The goal is to unify Frisian language data from multiple sources and make it accessible via standardized APIs and applications to benefit future language work. Drenth invites others to join in cooperation to further develop and expand the solutions.
REST in AEM is not because it builds Web implementations or uses Web architecture. REST is an architectural style for network-based applications that induces the same properties as the World Wide Web through the use of design constraints. Specifically, REST constrains applications through five uniform interface constraints that induce properties like simple, visible, reusable, stateless communication and representations exchanged through self-descriptive messages.
The document discusses the present and future of the OpenOffice.org documentation project. Currently, documentation is scattered across various websites and sources, with outdated and unclear information. Going forward, the project aims to create a central portal for easy user access, ensure content is targeted, up-to-date, and allows contributions from the community. Challenges include legal issues, improving the wiki structure, and combining English and non-English documentation.
The document discusses Open Document Format (ODF) which aims to make office documents more accessible and interoperable by being based on open standards like XML, ZIP, and CSS. It describes how ODF files can be programmatically processed at different levels of abstraction from direct XML to object models. Frameworks like odf4j and AODL provide ODF support for Java and .NET respectively, hiding some of the XML complexity and exposing ODF semantics. Future work areas include harmonizing ODF toolkits and extending ODF through new metadata mechanisms.
The document discusses Office Open XML, the file format used in Microsoft Office 2007. It provides an overview of OOXML, including its structure as a zip file containing XML files for different content types like documents, spreadsheets, presentations. It also discusses OpenOffice.org's implementation of an OOXML importer through a native filter being developed jointly with Novell. The filter uses a fast SAX parser and works within OpenOffice.org's data model to handle the different OOXML document types.
This document provides an introduction to HTML and CSS. It begins with an overview of HTML, including its history and purpose. It then covers HTML5 updates and differences from previous versions. The document also introduces CSS, explaining concepts like rules, selectors, properties, and values. It describes different methods for adding CSS to HTML, such as internal, external, and imported stylesheets. Finally, the document discusses CSS selectors like type, ID, and class selectors, as well as inheritance in CSS.
This document provides an introduction to MongoDB and Python. It discusses how to install and run MongoDB, set up a Python environment connected to MongoDB, perform basic read and write operations on MongoDB collections from Python. It also covers common patterns for modeling data in MongoDB like embedding documents and indexing, and integrating MongoDB with popular Python web frameworks.
Eduard Drenth presents the work done over 4 years at the Fryske Akademy to develop online Frisian dictionaries and language services. They created a strict TEI-based data model, generic code for querying and transforming dictionary data, and applications including a JSON service and web app. The goal is to unify Frisian language data from multiple sources and make it accessible via standardized APIs and applications to benefit future language work. Drenth invites others to join in cooperation to further develop and expand the solutions.
REST in AEM is not because it builds Web implementations or uses Web architecture. REST is an architectural style for network-based applications that induces the same properties as the World Wide Web through the use of design constraints. Specifically, REST constrains applications through five uniform interface constraints that induce properties like simple, visible, reusable, stateless communication and representations exchanged through self-descriptive messages.
The document discusses the present and future of the OpenOffice.org documentation project. Currently, documentation is scattered across various websites and sources, with outdated and unclear information. Going forward, the project aims to create a central portal for easy user access, ensure content is targeted, up-to-date, and allows contributions from the community. Challenges include legal issues, improving the wiki structure, and combining English and non-English documentation.
The document discusses Open Document Format (ODF) which aims to make office documents more accessible and interoperable by being based on open standards like XML, ZIP, and CSS. It describes how ODF files can be programmatically processed at different levels of abstraction from direct XML to object models. Frameworks like odf4j and AODL provide ODF support for Java and .NET respectively, hiding some of the XML complexity and exposing ODF semantics. Future work areas include harmonizing ODF toolkits and extending ODF through new metadata mechanisms.
The document discusses Office Open XML, the file format used in Microsoft Office 2007. It provides an overview of OOXML, including its structure as a zip file containing XML files for different content types like documents, spreadsheets, presentations. It also discusses OpenOffice.org's implementation of an OOXML importer through a native filter being developed jointly with Novell. The filter uses a fast SAX parser and works within OpenOffice.org's data model to handle the different OOXML document types.
This document provides an introduction to HTML and CSS. It begins with an overview of HTML, including its history and purpose. It then covers HTML5 updates and differences from previous versions. The document also introduces CSS, explaining concepts like rules, selectors, properties, and values. It describes different methods for adding CSS to HTML, such as internal, external, and imported stylesheets. Finally, the document discusses CSS selectors like type, ID, and class selectors, as well as inheritance in CSS.
This document provides an introduction to MongoDB and Python. It discusses how to install and run MongoDB, set up a Python environment connected to MongoDB, perform basic read and write operations on MongoDB collections from Python. It also covers common patterns for modeling data in MongoDB like embedding documents and indexing, and integrating MongoDB with popular Python web frameworks.
This document lists various worst practices to avoid when developing with Drupal, including hacking core or contributed modules, not using Drupal APIs, relying too heavily on built-in search or cache, mixing features and module code, keeping development tools in production environments, and more. It provides alternatives and recommendations such as using Features Builder, writing testable code, separating concerns into modules and themes, and regularly reevaluating practices.
The document discusses creating Linked Open Data (LOD) microthesauri from the Art & Architecture Thesaurus (AAT). It defines a microthesaurus as a designated subset of a thesaurus that can function independently. The document provides an overview of creating an AAT-based LOD dataset for a digital art and architecture collection. It also demonstrates how to extract concept URIs and labels from the AAT thesaurus structure using SPARQL queries to build microthesauri.
Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011jbarclay
This document provides an overview of the Feeds module in Drupal 7, including use cases, architecture, terminology, and examples. It discusses importing content from various data sources like CSV files, XML, databases, and web services. Common use cases include importing node, taxonomy, and user content. The document demonstrates a basic CSV import and discusses writing custom plugins and extensions.
Watch video: https://www.youtube.com/watch?v=SgmmoRCmIa4&list=PLIuWze7quVLDSxJKDj3pRSqvmHAzQ_9vd&index=6
Here is the summary of what you'll learn:
00:02:00 Welcome
00:03:32 Meet Chafik, CEO of Brainboard.co
00:05:00 Our goal at Brainboard
00:06:00 Terraform modules definition
00:20:00 Build your own modules
00:21:00 Azure
00:48:00 AWS
00:52:00 Best practices
00:56:00 Review some of the most used community modules
00:56:43 Lambda
01:00:30 AKS
01:04:00 Where to host your modules?
01:06:04 Challenges of maintaining modules within a team
01:09:00 Build your own modules’ catalog
MVC Frameworks for building PHP Web ApplicationsVforce Infotech
Hello and welcome to VForce Infotech Training on MVC Frameworks for Building PHP Web Applications. In this course we are going to look at PHP, and specifically we are going to look into some of the main frameworks that you can use to develop PHP applications. We are going to look at some of the patterns, most specifically the Model/View/ Controller pattern, which is at the root of every one of these frameworks. And then we are going to dive in and take a look at the Zend framework. We are going to also look at the SymFony framework. We will look at the lightweight CodeIgniter framework. And lastly will look at CakePHP. This course was designed to introduce you to some of the more popular PHP frameworks.
Hopefully you can choose what might be right for you and your project. I'll show you how to get started in each of them and you can take it from there. So let's get started.
This tutorial provides an overview of creating a sample Django application that demonstrates basic components including models, views, templates, URLs, forms, and the admin site. Key steps covered include:
- Setting up a Django project in Eclipse with Python, Django, SQLite
- Creating models, views, URLs, and templates
- Using the Django admin site to populate the database
- Displaying model data in templates
- Creating and processing a basic form
Introduction to Behavior Driven Development Robin O'Brien
This document provides an introduction to Behaviour Driven Development (BDD). It discusses that BDD aims to bridge communication gaps between developers and clients by using examples written in a common language. It also provides a practical example of setting up BDD with JBehave and Java in IntelliJ IDEA, including creating a story file, steps class, and linking class. The document demonstrates how BDD allows describing desired system behaviors in a way that is understandable to both technical and non-technical stakeholders.
This document summarizes 10 ways to improve code based on a presentation by Neal Ford. The techniques discussed include composing methods to perform single tasks, test-driven development to design through tests, using static analysis tools to find bugs, avoiding singletons, applying the YAGNI principle to only build what is needed, questioning conventions, embracing polyglot programming, learning Java nuances, enforcing the single level of abstraction principle, and considering "anti-objects" that go against object-oriented design. Questions from the audience are then addressed.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is open source under a BSD license and aims to make PHP application development simple while taking advantage of PHP 5 features.
The document discusses contributing to the open source content management platform Drupal. It describes what Drupal is, why people contribute code to it, the types of contributions, and challenges of contributing. It also provides a case study of the contributed Display Suite module and tips for becoming a module developer or maintainer.
This document provides an overview of the Views module in Drupal, including:
- What Views is and how it allows filtering, selecting fields, sorting, and theming lists of content
- The differences between page and block views
- How to set filters, arguments, exposed filters, and sorting
- Using views to display content in tabs
- Advanced features like templating, relationships, unions, and actions
- Tips for development like using Devel and debugging with phpEd
This document provides an overview of the Views module in Drupal, including:
- What Views is and how it allows filtering, selecting fields, sorting and theming lists of content
- The different view types (page, block) and output formats (list, table, teaser)
- How to add filters, arguments, exposed filters and sorting
- Advanced features like tabbed views, templating, relationships, computed fields and actions
- Tips for development including useful modules and debugging tools
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is released under a permissive open source license and is intended to help keep PHP competitive with other programming languages.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is released under a BSD license and its development involves contributions from Zend and other PHP companies.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is released under a BSD license and its development involves both open source contributors and commercial partnerships.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is released under a BSD license and its development involves both open source contributors and commercial partnerships.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is open source under a BSD license and is intended to help keep PHP competitive with other programming languages.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is open source under a BSD license and aims to make PHP application development simple while taking advantage of PHP 5 features.
The document introduces the Zend Framework. It discusses that the framework is a collection of PHP classes based on PHP 5 best practices. It aims to simplify common tasks, provide a starting point for applications, and demonstrate PHP 5 best practices. The framework strives to make PHP competitive with other technologies and provide high-quality, PHP 5 compatible components. It uses a BSD style license and modular design. Example uses of controllers, input filtering, mailing, and searching are provided.
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
This document lists various worst practices to avoid when developing with Drupal, including hacking core or contributed modules, not using Drupal APIs, relying too heavily on built-in search or cache, mixing features and module code, keeping development tools in production environments, and more. It provides alternatives and recommendations such as using Features Builder, writing testable code, separating concerns into modules and themes, and regularly reevaluating practices.
The document discusses creating Linked Open Data (LOD) microthesauri from the Art & Architecture Thesaurus (AAT). It defines a microthesaurus as a designated subset of a thesaurus that can function independently. The document provides an overview of creating an AAT-based LOD dataset for a digital art and architecture collection. It also demonstrates how to extract concept URIs and labels from the AAT thesaurus structure using SPARQL queries to build microthesauri.
Drupal 7 Feeds Intro Drupal Camp Indianapolis 2011jbarclay
This document provides an overview of the Feeds module in Drupal 7, including use cases, architecture, terminology, and examples. It discusses importing content from various data sources like CSV files, XML, databases, and web services. Common use cases include importing node, taxonomy, and user content. The document demonstrates a basic CSV import and discusses writing custom plugins and extensions.
Watch video: https://www.youtube.com/watch?v=SgmmoRCmIa4&list=PLIuWze7quVLDSxJKDj3pRSqvmHAzQ_9vd&index=6
Here is the summary of what you'll learn:
00:02:00 Welcome
00:03:32 Meet Chafik, CEO of Brainboard.co
00:05:00 Our goal at Brainboard
00:06:00 Terraform modules definition
00:20:00 Build your own modules
00:21:00 Azure
00:48:00 AWS
00:52:00 Best practices
00:56:00 Review some of the most used community modules
00:56:43 Lambda
01:00:30 AKS
01:04:00 Where to host your modules?
01:06:04 Challenges of maintaining modules within a team
01:09:00 Build your own modules’ catalog
MVC Frameworks for building PHP Web ApplicationsVforce Infotech
Hello and welcome to VForce Infotech Training on MVC Frameworks for Building PHP Web Applications. In this course we are going to look at PHP, and specifically we are going to look into some of the main frameworks that you can use to develop PHP applications. We are going to look at some of the patterns, most specifically the Model/View/ Controller pattern, which is at the root of every one of these frameworks. And then we are going to dive in and take a look at the Zend framework. We are going to also look at the SymFony framework. We will look at the lightweight CodeIgniter framework. And lastly will look at CakePHP. This course was designed to introduce you to some of the more popular PHP frameworks.
Hopefully you can choose what might be right for you and your project. I'll show you how to get started in each of them and you can take it from there. So let's get started.
This tutorial provides an overview of creating a sample Django application that demonstrates basic components including models, views, templates, URLs, forms, and the admin site. Key steps covered include:
- Setting up a Django project in Eclipse with Python, Django, SQLite
- Creating models, views, URLs, and templates
- Using the Django admin site to populate the database
- Displaying model data in templates
- Creating and processing a basic form
Introduction to Behavior Driven Development Robin O'Brien
This document provides an introduction to Behaviour Driven Development (BDD). It discusses that BDD aims to bridge communication gaps between developers and clients by using examples written in a common language. It also provides a practical example of setting up BDD with JBehave and Java in IntelliJ IDEA, including creating a story file, steps class, and linking class. The document demonstrates how BDD allows describing desired system behaviors in a way that is understandable to both technical and non-technical stakeholders.
This document summarizes 10 ways to improve code based on a presentation by Neal Ford. The techniques discussed include composing methods to perform single tasks, test-driven development to design through tests, using static analysis tools to find bugs, avoiding singletons, applying the YAGNI principle to only build what is needed, questioning conventions, embracing polyglot programming, learning Java nuances, enforcing the single level of abstraction principle, and considering "anti-objects" that go against object-oriented design. Questions from the audience are then addressed.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is open source under a BSD license and aims to make PHP application development simple while taking advantage of PHP 5 features.
The document discusses contributing to the open source content management platform Drupal. It describes what Drupal is, why people contribute code to it, the types of contributions, and challenges of contributing. It also provides a case study of the contributed Display Suite module and tips for becoming a module developer or maintainer.
This document provides an overview of the Views module in Drupal, including:
- What Views is and how it allows filtering, selecting fields, sorting, and theming lists of content
- The differences between page and block views
- How to set filters, arguments, exposed filters, and sorting
- Using views to display content in tabs
- Advanced features like templating, relationships, unions, and actions
- Tips for development like using Devel and debugging with phpEd
This document provides an overview of the Views module in Drupal, including:
- What Views is and how it allows filtering, selecting fields, sorting and theming lists of content
- The different view types (page, block) and output formats (list, table, teaser)
- How to add filters, arguments, exposed filters and sorting
- Advanced features like tabbed views, templating, relationships, computed fields and actions
- Tips for development including useful modules and debugging tools
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is released under a permissive open source license and is intended to help keep PHP competitive with other programming languages.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is released under a BSD license and its development involves contributions from Zend and other PHP companies.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is released under a BSD license and its development involves both open source contributors and commercial partnerships.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is released under a BSD license and its development involves both open source contributors and commercial partnerships.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is open source under a BSD license and is intended to help keep PHP competitive with other programming languages.
The document introduces the Zend Framework, which is a modular collection of PHP classes that simplify common tasks. It aims to be a leading PHP application development framework and demonstration of PHP 5 best practices. Some key components introduced include an MVC framework, database abstraction layer, input filtering, mail sending capabilities, and a Lucene-based search engine. The framework is open source under a BSD license and aims to make PHP application development simple while taking advantage of PHP 5 features.
The document introduces the Zend Framework. It discusses that the framework is a collection of PHP classes based on PHP 5 best practices. It aims to simplify common tasks, provide a starting point for applications, and demonstrate PHP 5 best practices. The framework strives to make PHP competitive with other technologies and provide high-quality, PHP 5 compatible components. It uses a BSD style license and modular design. Example uses of controllers, input filtering, mailing, and searching are provided.
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
Consistent toolbox talks are critical for maintaining workplace safety, as they provide regular opportunities to address specific hazards and reinforce safe practices.
These brief, focused sessions ensure that safety is a continual conversation rather than a one-time event, which helps keep safety protocols fresh in employees' minds. Studies have shown that shorter, more frequent training sessions are more effective for retention and behavior change compared to longer, infrequent sessions.
Engaging workers regularly, toolbox talks promote a culture of safety, empower employees to voice concerns, and ultimately reduce the likelihood of accidents and injuries on site.
The traditional method of conducting safety talks with paper documents and lengthy meetings is not only time-consuming but also less effective. Manual tracking of attendance and compliance is prone to errors and inconsistencies, leading to gaps in safety communication and potential non-compliance with OSHA regulations. Switching to a digital solution like Safelyio offers significant advantages.
Safelyio automates the delivery and documentation of safety talks, ensuring consistency and accessibility. The microlearning approach breaks down complex safety protocols into manageable, bite-sized pieces, making it easier for employees to absorb and retain information.
This method minimizes disruptions to work schedules, eliminates the hassle of paperwork, and ensures that all safety communications are tracked and recorded accurately. Ultimately, using a digital platform like Safelyio enhances engagement, compliance, and overall safety performance on site. https://safelyio.com/
Mobile App Development Company In Noida | Drona InfotechDrona Infotech
React.js, a JavaScript library developed by Facebook, has gained immense popularity for building user interfaces, especially for single-page applications. Over the years, React has evolved and expanded its capabilities, becoming a preferred choice for mobile app development. This article will explore why React.js is an excellent choice for the Best Mobile App development company in Noida.
Visit Us For Information: https://www.linkedin.com/pulse/what-makes-reactjs-stand-out-mobile-app-development-rajesh-rai-pihvf/
Nashik's top web development company, Upturn India Technologies, crafts innovative digital solutions for your success. Partner with us and achieve your goals
Penify - Let AI do the Documentation, you write the Code.KrishnaveniMohan1
Penify automates the software documentation process for Git repositories. Every time a code modification is merged into "main", Penify uses a Large Language Model to generate documentation for the updated code. This automation covers multiple documentation layers, including InCode Documentation, API Documentation, Architectural Documentation, and PR documentation, each designed to improve different aspects of the development process. By taking over the entire documentation process, Penify tackles the common problem of documentation becoming outdated as the code evolves.
https://www.penify.dev/
What to do when you have a perfect model for your software but you are constrained by an imperfect business model?
This talk explores the challenges of bringing modelling rigour to the business and strategy levels, and talking to your non-technical counterparts in the process.
The Comprehensive Guide to Validating Audio-Visual Performances.pdfkalichargn70th171
Ensuring the optimal performance of your audio-visual (AV) equipment is crucial for delivering exceptional experiences. AV performance validation is a critical process that verifies the quality and functionality of your AV setup. Whether you're a content creator, a business conducting webinars, or a homeowner creating a home theater, validating your AV performance is essential.
Transforming Product Development using OnePlan To Boost Efficiency and Innova...OnePlan Solutions
Ready to overcome challenges and drive innovation in your organization? Join us in our upcoming webinar where we discuss how to combat resource limitations, scope creep, and the difficulties of aligning your projects with strategic goals. Discover how OnePlan can revolutionize your product development processes, helping your team to innovate faster, manage resources more effectively, and deliver exceptional results.
What is Continuous Testing in DevOps - A Definitive Guide.pdfkalichargn70th171
Once an overlooked aspect, continuous testing has become indispensable for enterprises striving to accelerate application delivery and reduce business impacts. According to a Statista report, 31.3% of global enterprises have embraced continuous integration and deployment within their DevOps, signaling a pervasive trend toward hastening release cycles.
What is Continuous Testing in DevOps - A Definitive Guide.pdf
TEI ODD based development
1. Welcome to my presentation on ODD. I have been working with ODD for about 4
years, first because I wanted universal dependency based linguistics in Frisian
corpora,
later because I wanted a strict TEI and universal dependency based dictionary format.
I want to show you how ODD has helped me to deliver reliable, interoperable
solutions.
First I will show you what ODD is, then I will show you how ODD can be used in
development pipelines. We will have a look at how ODD's can inherit from each
other,
and have a glance atteipublisher. Finally I will share some pro's and con's and the
reasons why we at the Fryske Akademy stick to ODD as a basis for solution
development.
1
TEI and ODD for
LINGUISTICS
A solid basis for development?
edrenth@fryske-akademy.nl
2. So what is an ODD? An ODD is a regular TEI document in which you define your data
model using a schemaSpec. In the ODD you can document your data model using TEI
elements such as div, p, gloss and def. In this documentation you can include the
actual specifications, to which you can refer from within schemaSpec. This gives you a
nice way to specify your data model in a documented manner.
Inside the specification of an element you can indicate how this element is to be
processed. We don't use this yet, but since the latest versions ofteipublisher it has
become a very interesting mechanism. Once you have your ODD you can generate
validation schemes, documentation and more.
2
What is ODD
• One Document Doesall
• It is a TEI document
• Holding one schemaSpec element
• It is the mechanism to customize TEI
• TEI is designed to be customized
• What canit do
• Generate validation
• Generate documentation
• Describe processing model
• https://tei-c.org/guidelines/customization/
• https://tei-c.org/release/doc/tei-p5-doc/en/html/USE.html#IM-unified
• https://tei-c.org/release/doc/tei-p5-doc/en/html/TD.html#TDmodules
• https://tei-c.org/release/doc/tei-p5-doc/en/html/TD.html#TDPMPM
3. Here you see a basic example of a schema definition in ODD. Often the structure will
be a schemaSpec with references to modules you want to work with and
specifications of elements you want to change.
The start attribute on schemaSpec tells which root element(s) is(are) allowed. Each
moduleRef points to an existing module, available in TEI (online)
or elsewhere. A source attribute, left out in this example, allows you to point to the
file where module definitions can be found, I will show you more on this later.
To limit the vast number of elements in modules you use the include or except
attributes on moduleRef. NOTE that if you omit an element in the include attribute
and refer to it later from
an elementRef, schema generation will not fail, instead the element will just not be
there. After the module references you usually list some elementSpecs for elements
that you want to change.
NOTE that omitting the mode attribute on elementSpec means add, not change.
Adding already existing elements is weird but again often does not make
transformation fail!
Including a content element in an elementSpec will overwrite existing content. The
content of content resembles for example xsd, basically you can use sequence and
alternate.
3
4. A very nice feature I think is the ability to use constraints in element specifications,
most people will use schematron with assert, report and xpath.
3
5. Besides elements also attributes can be specified, in this case I add linguistic feature
attributes to the analysis module. These attributes can be defined in their own
namespace.
You can define the datatype of attributes which can be an xml schema datatype using
the name attribute, or like here, a TEI datatype using key.
4
6. You can refer to previously defined attributes via memberOf. When an element is a
member of an attribute class, the attributes defined in this class are allowed for that
element.
NOTE the "mode is change" on classes, if you omit it the default will be "replace"
meaning you will loose all other class memberships.
5
7. More possibilities worth mentioning but not in detail. The first two keep things
organized, the model specifies element processing.
6
• specGrp –specRef: grouping specs
• macroSpec –macroRef: expanding spec content
• model: definebehaviourofelements
More possibilities
8. Now, this is where the benefits really start. Once you have your ODD you can
construct a pipeline without the need for coding that will give you validation and
documentation,
which you can use in for example editing environments like oxygen.
First thing to do is "compile" or better said expand your ODD using the available TEI
stylesheet. The necessary parts from modules in the TEI source will be combined with
your specifications.
After this is done you can transform to rng, again using the available stylesheet, or,
transform to a separate schematron. Rng can be transformed to xsd, which you may
want to generate jaxb classes. Last but not least there is a nice library that deals with
the complexity of transforming schematron to xslt, the execution of validation and
with the processing of validation results.
You can also use oxygen to transform, or oxgarage oryou can use roma to construct
ODD online, but the downside is this gives you less control and insight and you get
the version of TEI source and stylesheets available in these tools at the time.
7
odd odd2odd
• .compiled
odd2rng
• rng with
schematron
odd2sch
• .sch
trang
• .xsd
dmaus
schxslt
• xslt and/or
java
validation
ODD, processing
1. Maven: https://bitbucket.org/fryske-akademy/online-dictionaries/src/master/pom.xml
2. Oxygen
3. https://oxgarage.tei-c.org/
4. https://roma.tei-c.org/
5. Command line / maven
1. https://github.com/TEIC/Stylesheets/tags
2 – 4 use a version you may not want!
9. This makes me really happy! Recently I discovered it is possible, though verbose, to
define a maven pipeline that implements a lot of steps I mostly performed by hand
before. Now I can just do mvn verify, no ant needed either and no dependencies to
online sources.
8
ODD, processing, maven
<transformationSet>
<stylesheet>src/main/Stylesheets-${stylesheetversion}/odds/odd2odd.xsl</stylesheet>
<parameters>….</parameters>
<outputDir>src/main/resources/odd</outputDir>
<fileMappers>….</fileMappers>
</transformationSet>
<transformationSet>
<stylesheet>src/main/Stylesheets-${stylesheetversion}/odds/odd2relax.xsl</stylesheet>
<parameters>….</parameters>
</transformationSet>
<transformationSet>
<stylesheet>src/main/Stylesheets-${stylesheetversion}/odds/extract-isosch.xsl</stylesheet>
<outputDir>src/main/resources/schematron</outputDir>
<fileMappers>….</fileMappers>
</transformationSet>
<plugin>
<groupId>net.sigmalab.trang</groupId>
<artifactId>trang-maven-plugin</artifactId>
<version>1.2</version>
1. <dependency>
<groupId>name.dmaus.schxslt</groupId>
<artifactId>java</artifactId>
<version>2.0.3</version>
https://bitbucket.org/fryske-akademy/online-dictionaries/src/master/pom.xml
10. On top of the available transformations from the TEI community I found it very useful
to write transformations from ODD. For example to generate a configuration file for
blacklab,
which in turn is used to build lucene indexes. Transformations like that help to stay
consistent and in control for example in case of data model changes. Naturally they
can be included in maven pipelines.
9
ODD, generation
https://search.maven.org/search?q=a:TeiLinguisticsFa
https://bitbucket.org/fryske-akademy/tei-encoding/src/master/reusables/
11. Something about inheritance now. I must admit I recently abandoned it, because of
added complexity and lack of use-case. The basics are simple, write an ODD, compile
it, write another ODD that uses the compiled first. The source attribute is crucial, you
can specify it on schemaSpec, which means all moduleRef without a source attribute
will retrieve their content from that source. All moduleRef wíth a source attribute
will retrieve their content from there.
An elementRef can also have a source attribute allowing you for example to re-add an
element left out by the parent ODD.
Despite these simple basics it is kind of cumbersome to find out exactly which
elements and modules come from exactly where, how they are defined, modified,
etc.
Rule of thumb: use fixed versions and keep It simple.
10
Compile odd1
• odd2odd.xsl
Create odd2
using compiled
odd1
• @source=...
ODD, chaining
http://teic.github.io/PDF/howtoChain.pdf
Inherit from other odd's
12. Now, a glance at perhaps one of the most promising possibilities of ODD, especially
when looking at the teipublisher implementation of it. You can specify a processing
model for elements.
This allows you to decouple element definition from visual element behaviour.
A model defines behaviour and can do so conditionally. You can provide parameters
for the processing. Parameter values originate from the actual element at the time of
processing.
OutputRendition should I think be avoided, instead rendition definitions should be
external, like (s)css and classes.
Teipublishertakes processing model a step further through the use of templates, web
components and xquery instead of xpath. We will probably be using it for digital
editions.
11
ODD, processing model
https://tei-c.org/release/doc/tei-p5-doc/en/html/TD.html#TDPM
https://teipublisher.com
https://e-editiones.org/
Very promising!
13. These are some examples of solutions at the Fryske Akademy. For corpora we
generate blacklab config and javascript from ODD and we use the html stylesheet
from TEI to build a fully functional corpus query system.
For dictionaries we generate rng, xsd and schematron that are used in a
validationhelper which is published to maven central. This library is then used in an
app that publishes approved dictionary articles. An exist-db app allows querying the
dictionary and presents results in either json or html.
Another example is a library for linguistics in corpora where the generatedxsd is
translated into jaxb classes using an also generated bind.xml. This library is used in a
Frisian lexicon service.
12
ODD
•corpora
blacklab
config, js
docs
borpus
linguistics
Usage in
applications
eclipse moxy
jax-rs, json rest
apache cxf wsdl2java
jaxb jax-ws, soap ws
maven central
jaxb2/xjc
jaxb classes
ODD
rng/xsd bind.xml
ODD
•dictionaries
rng/xsd/schematron validationhelper maven central
publish app, json
service, gui
Frisian lexicon
https://web2.fa.knaw.nl/corpus-frontend
https://web2.fa.knaw.nl/exist/apps/onfw/index.html (TEST!)
https://web2.fa.knaw.nl/foarkarswurdlist-ws/
14. Wrapping up I give you a list of pro's and con's of ODD based developments. The pro's
weigh heavier for us, perhaps the most problematic in practice is the complexity of
the development pipelines
that often consist out of multiple generation and publication steps and possibly
inherited dependencies.
For me as a java adapt it is a pitty that TEI focus is on rng, not xsd. I realy like and
benefit from jaxb and still hope xsd 1.1 will be a success and find it's way into a
follow-up for jaxb.
13
pros
• Reliable build processes that guaranteeinteroperability
• Maintain data logic inoneplace
• Generation ofrng, schematron,xsd
• Generation using xslt
• Sticking closeto TEI, benefit from updates and tools
• Limit knowledge and technologies to maintain
cons
• Niche (complex) knowledge
• Stylesheets maynot generatewhatyou want
• Chaining (inheritance) canbe confusing
• Hard to debug and test
• ODD change may cascadeupdates oflibs and applications
• Xsd support(via trang) less stablethen rng
15. For us at the Fryske Akademy there are a lot of reasons to stick to our ODD based
approach. Perhaps I raised some curiosity that will lead to increased use of ODD
which in turn will lead to a load of github issues on ODD that will be solved,
improving the usability of ODD.
14
To ODD or not to ODD
• It is possible to maintain stable build processes based on ODD
•With code generation
• Active community, active maintenance of stylesheets
• It is possible to build reusable libraries based on ODD
• Over the past 4 years little problems
• ODD syntax is rather simple
• ODD with teipublisher for digital editions and integration in blacklab
16. Thank you for watching, my live version will now be available if you have any
questions.
15
Thanks
Eduard Drenth
edrenth@fryske-akademy.nl
I would like odd to get a more prominent
place in the TEI stack and community. It
could be a well known goldmine