(Go: >> BACK << -|- >> HOME <<)

SlideShare a Scribd company logo
Chase Tingley
Spartan Software, Inc
JLIFF: Where we are,
where we're going
https://www.flickr.com/photos/anirvan/12002658/
The Story So Far
XLIFF has always been XML-based
● No abstraction independent of the syntax
● Limits our ability to reason about the
format
● Limits its adoption and (possibly) longevity
The OASIS XLIFF
Object
Model
Other
Serializations
Technical Committee
The XLIFF-OMOS TC
&
“Since December 2015”
● Develop an Object Model (OM)
● Develop non-XML representations of the OM
● Also in scope:
○ Mappings between different *LIFFs
○ Future versions of TMX
○ APIs related to XLIFF or related standard data
exchange
XLIFF-OMOS Goals
Brief Digression
The XLIFF Object Model
http://blog.blprnt.com/blog/blprnt/data-in-an-alien-context-kepler-visualization-source-code
● Define “LIFF” independent of representation
● Streamline introduction to XLIFF/JLIFF/etc
● Standardize terminology of language
interchange concepts
OM Goals
● Working draft of prose spec
● UML of XLIFF core
● Work ongoing at https://github.com/oasis-
tcs/xliff-omos-om
OM Status
OM: Partial UML Rendering
JLIFF
● Ubiquitous in web service implementations
● Syntactically simple
● Widely understood
● Good tooling
Why JSON?
● Webservices
● Online translation environments
● Data storage in JSON-based stores
Use Cases
● Proof of concept for OM idea
● Improve availability of support for LIOM-
compatible implementations in various
development scenarios
● Data should be interchangeable without loss
between JLIFF and XLIFF!
Goals for JLIFF
● Simple
● Reasonably concise
● Widely supported
● Good Unicode support
JSON: Strengths and Limitations
● Incompletely specified
(Nicolas Seriot,
“Parsing JSON is a
Minefield”)
● Lack of attributes
● Difficult to express
some XML concepts
● JSON-Schema
○ Data typing, validation
● JSON-LD
○ Namespacing
Complementary Technologies
XLIFF always works at the file level
<xliff>
<file id="f1">
...
</file>
<file id="f2">
...
</file>
</xliff>
JLIFF is attempting a more flexible
approach
{
"files": [...]
}
{
"groups": [...]
}
{
"fragment": {...}
}
* These representations
may change
** What are the
semantics of converting
this to XLIFF?
"unit": {
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"canResegment": { "type": "boolean", "default": "false" },
"translate": { "type": "boolean", "default": "false" },
"srcDir": { "$ref": "#/definitions/dir" },
"trgDir": { "$ref": "#/definitions/dir" },
"type": { "$ref": "#/definitions/type" },
"notes": { "$ref": "#/definitions/notes" },
"subunits": { "$ref": "#/definitions/subunits" },
"originalData": { "$ref": "#/definitions/originalData" },
},
"additionalProperties": false,
"required": [ "id" ]
},
Schema work has been straightforward
<unit id="1">
<gls:glossary>
<gls:glossEntry ref="#m1">
<gls:term source="publicTermbase">TAB key</gls:term>
<gls:translation id="1"
source="myTermbase">Tabstopptaste</gls:translation>
<gls:translation ref="#m2" source="myTermbase">TAB-
TASTE</gls:translation>
<gls:definition source="publicTermbase">A keyboard key that is
traditionally used to insert tab characters into a document.
</gls:definition>
</gls:glossEntry>
</gls:glossary>
<segment>
<source>Press the <mrk id="m1" type="term">TAB key</mrk>.</source>
<target>Drücken Sie die <mrk id="m2" type="term">TAB-TASTE</mrk>.
</target>
</segment>
</unit>
What about Namespaces?
urn:oasis:names:tc:xliff:glossary:2.0 glossary
urn:oasis:names:tc:xliff:document:2.0 segment
Namespacing via JSON-LD
{
"@context": {
"gls": "urn:oasis:names:tc:xliff:glossary:2.0:glossary",
}
}
Defined at http://docs.oasis-open.org/xliff-omos/jliff/v2.1/jliff-v2.1.jsonld:
{
"@context": "http://docs.oasis-open.org/xliff-omos/jliff/v2.1/jliff-v2.1.jsonld",
....
"gls:glossary": [
{
"gls:definition": { ... }
}
]
}
Use of a colon is a minor inconvenience for some
languages (Javascript)
● Source, Target data are flat lists of objects
○ snippet of text
○ marker
○ inline code
● Segments, Ignorables collected as
"subunits" array
● Default property values in JSON-schema
make things more concise
XLIFF 2.x Unit Model
{
"@context":"http://docs.oasis-open.org/xliff-omos/jliff/v2.1/jliff-v2.1.jsonld",
"jliff": "2.1",
"srcLang": "en",
"trgLang": "de",
"units": [ {
"id": "u1",
"subunits": [
{
"source": [
{ "text": "Press the " },
{ "kind": "sm", "id": "m1", "type": "term" },
{ "text": "TAB key" },
{ "kind": "em", "startRef": "m1" },
{ "text": "." }
],
"target": [ ... ]
},
{ "type": "ignorable", "source": "<br/>" }
],
A real example, part 1
Markers
(These may change)
Always preserve space
"gls:glossary": [ {
"ref": "m1",
"term": { "text": "TAB key", "source": "publicTermbase" },
"translations": [ {
"id": "1",
"source": "myTermbase",
"text": "Tabstopptaste"
}
],
"definition": {
"text": "A keyboard key that is traditionally used to
insert tab characters into a document.",
"source": "publicTermbase"
}
} ]
}
]
}
A real example, part 2
This looks... fine to a machine
{"@context":"http://docs.oasis-open.org/xliff-
omos/jliff/v2.1/jliff-v2.1.jsonld",
"jliff":"2.1","srcLang":"en",
"trgLang":"de","units":[{"id":"u1","subunits":[{"source":[
{"text":"Press the "},{"id":"m1","kind":"sm","type":
"term"},{"text":"TAB key"},{"startRef":"m1","kind":"em"},
{"text":"."}],"target":[{"text":"Drücken Sie die "},
{"id":"m2","kind":"sm","type":"term"},{"text": "TAB-
TASTE"},{"startRef":"m1","kind":"em"},{"text":"."}]},{"typ
e":"ignorable","source":"<br/>"}],"gls:glossary":
[{"ref":"m1","term":{"text":"TAB key","source":
"publicTermbase"},"translations":[{"id":"1","source":
"myTermbase","text":"Tabstopptaste"}], "definition":
{"text":"A keyboard key that is traditionally used to
insert tab characters into a document.",
"source":"publicTermbase"}}]}]}
Obstacles
https://www.flickr.com/photos/fernando/2620041065
<mda:metadata>
<mda:metaGroup category="document_xml_attribute">
<mda:meta type="version">3</mda:meta>
<mda:meta type="phase">draft</mda:meta>
</mda:metaGroup>
</mda:metadata>
Obstacle: XML Haunts Us
It's just a bunch of
key/value pairs!
"mda:metadata": [
{
"mda:category": "document_xml_attribute",
"mda:meta": {
"mda:version": 3,
"mda:phase": "draft"
}
}
]
First Attempt at JLIFF mda
Simple list of
metadata groups
Use object
properties for
keys/values
"mda:metadata": {
"id": "optional-id",
"mda:metaGroups": [
{
"mda:category": "document_xml_attribute",
"mda:meta": [
{ "type": "version", "value": 3 },
{ "type": "phase", "value": "draft" }
]
}
]
}
Second Attempt at JLIFF mda
Additional structure
necessary
XML smell
Unfortunately, that doesn't work
Duplicate type keys are
possible
metadata must be an
object to hold this property
"Writers that do not support a given custom
namespace based user extension SHOULD
preserve that extension without Modification."
Obstacle: Cross-format Extension Handling
This works across
XLIFF/JLIFF
conversion, right?
<foo:data id="id123"
xmlns:foo="urn:foo:bar">
<foo:value>50</foo:value>
</foo:data>
Imagine a Custom XLIFF extension
This is easy to pass through in JLIFF! I
can just use a local @Context declaration
for the namespace, and then....
Oh.
Oh dear.
The Revenge of Untyped Values
<foo:data id="id123"
xmlns:foo="urn:foo:bar">
<foo:value>50</foo:value>
</foo:data>
"value" : 50
"value" : "50"
What is the data type of this value?
Is the appropriate JLIFF representation
or
Looking Ahead
https://www.flickr.com/photos/pmillera4/13570027834/
● Finish the schema! (Modules, modules)
● Write the doc!
● Implementations! (Okapi, ???)
● (Finish OM)
● (Look at other formats)
Goals for 2018
JLIFF work on GitHub:
https://github.com/oasis-tcs/xliff-omos-jliff
OM work on GitHub:
https://github.com/oasis-tcs/xliff-omos-om
Where to learn more
Discussion!
Questions?
chase@spartansoftwareinc.com
@ctatwork
JLIFF: Where we are, and where we're going

More Related Content

What's hot

Php Crash Course - Macq Electronique 2010
Php Crash Course - Macq Electronique 2010Php Crash Course - Macq Electronique 2010
Php Crash Course - Macq Electronique 2010
Michelangelo van Dam
 
Internet Technology and its Applications
Internet Technology and its ApplicationsInternet Technology and its Applications
Internet Technology and its Applications
amichoksi
 
Php mysql
Php mysqlPhp mysql
Php mysql
Alebachew Zewdu
 
Let's Play Dart
Let's Play DartLet's Play Dart
Let's Play Dart
Jana Moudrá
 
Introduction to php php++
Introduction to php php++Introduction to php php++
Introduction to php php++
Tanay Kishore Mishra
 
Regular expression unit2
Regular expression unit2Regular expression unit2
Regular expression unit2
smitha273566
 
PHP variables
PHP  variablesPHP  variables
PHP variables
Siddique Ibrahim
 
Unit iv xml
Unit iv xmlUnit iv xml
Unit iv xml
smitha273566
 
OSS BarCamp Mumbai - JSON Presentation and Demo
OSS BarCamp Mumbai - JSON Presentation and DemoOSS BarCamp Mumbai - JSON Presentation and Demo
OSS BarCamp Mumbai - JSON Presentation and Demo
Ketan Khairnar
 
Data Types In PHP
Data Types In PHPData Types In PHP
Data Types In PHP
Mark Niebergall
 
The Big Documentation Extravaganza
The Big Documentation ExtravaganzaThe Big Documentation Extravaganza
The Big Documentation Extravaganza
Stephan Schmidt
 
Extensible Stylesheet Language
Extensible Stylesheet LanguageExtensible Stylesheet Language
Extensible Stylesheet Language
Jussi Pohjolainen
 
PHP Web Programming
PHP Web ProgrammingPHP Web Programming
PHP Web Programming
Muthuselvam RS
 
Php ch-1_server_side_scripting_basics
Php ch-1_server_side_scripting_basicsPhp ch-1_server_side_scripting_basics
Php ch-1_server_side_scripting_basics
bantamlak dejene
 
Php ch-2_html_forms_and_server_side_scripting
Php ch-2_html_forms_and_server_side_scriptingPhp ch-2_html_forms_and_server_side_scripting
Php ch-2_html_forms_and_server_side_scripting
bantamlak dejene
 
Object Relational Mapping in PHP
Object Relational Mapping in PHPObject Relational Mapping in PHP
Object Relational Mapping in PHP
Rob Knight
 
Class 2 - Introduction to PHP
Class 2 - Introduction to PHPClass 2 - Introduction to PHP
Class 2 - Introduction to PHP
Ahmed Swilam
 
Bcp
BcpBcp
Control Structures In Php 2
Control Structures In Php 2Control Structures In Php 2
Control Structures In Php 2
Digital Insights - Digital Marketing Agency
 

What's hot (19)

Php Crash Course - Macq Electronique 2010
Php Crash Course - Macq Electronique 2010Php Crash Course - Macq Electronique 2010
Php Crash Course - Macq Electronique 2010
 
Internet Technology and its Applications
Internet Technology and its ApplicationsInternet Technology and its Applications
Internet Technology and its Applications
 
Php mysql
Php mysqlPhp mysql
Php mysql
 
Let's Play Dart
Let's Play DartLet's Play Dart
Let's Play Dart
 
Introduction to php php++
Introduction to php php++Introduction to php php++
Introduction to php php++
 
Regular expression unit2
Regular expression unit2Regular expression unit2
Regular expression unit2
 
PHP variables
PHP  variablesPHP  variables
PHP variables
 
Unit iv xml
Unit iv xmlUnit iv xml
Unit iv xml
 
OSS BarCamp Mumbai - JSON Presentation and Demo
OSS BarCamp Mumbai - JSON Presentation and DemoOSS BarCamp Mumbai - JSON Presentation and Demo
OSS BarCamp Mumbai - JSON Presentation and Demo
 
Data Types In PHP
Data Types In PHPData Types In PHP
Data Types In PHP
 
The Big Documentation Extravaganza
The Big Documentation ExtravaganzaThe Big Documentation Extravaganza
The Big Documentation Extravaganza
 
Extensible Stylesheet Language
Extensible Stylesheet LanguageExtensible Stylesheet Language
Extensible Stylesheet Language
 
PHP Web Programming
PHP Web ProgrammingPHP Web Programming
PHP Web Programming
 
Php ch-1_server_side_scripting_basics
Php ch-1_server_side_scripting_basicsPhp ch-1_server_side_scripting_basics
Php ch-1_server_side_scripting_basics
 
Php ch-2_html_forms_and_server_side_scripting
Php ch-2_html_forms_and_server_side_scriptingPhp ch-2_html_forms_and_server_side_scripting
Php ch-2_html_forms_and_server_side_scripting
 
Object Relational Mapping in PHP
Object Relational Mapping in PHPObject Relational Mapping in PHP
Object Relational Mapping in PHP
 
Class 2 - Introduction to PHP
Class 2 - Introduction to PHPClass 2 - Introduction to PHP
Class 2 - Introduction to PHP
 
Bcp
BcpBcp
Bcp
 
Control Structures In Php 2
Control Structures In Php 2Control Structures In Php 2
Control Structures In Php 2
 

Similar to JLIFF: Where we are, and where we're going

Jsonsaga 100605143125-phpapp02
Jsonsaga 100605143125-phpapp02Jsonsaga 100605143125-phpapp02
Jsonsaga 100605143125-phpapp02
Ramamohan Chokkam
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific Languages
Eelco Visser
 
Don't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax TreesDon't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax Trees
Jamund Ferguson
 
Processing XML with Java
Processing XML with JavaProcessing XML with Java
Processing XML with Java
BG Java EE Course
 
Symfony + GraphQL
Symfony + GraphQLSymfony + GraphQL
Symfony + GraphQL
Alex Demchenko
 
Graphql + Symfony | Александр Демченко | CODEiD
Graphql + Symfony | Александр Демченко | CODEiDGraphql + Symfony | Александр Демченко | CODEiD
Graphql + Symfony | Александр Демченко | CODEiD
CODEiD PHP Community
 
Avro
AvroAvro
Ekon bestof rtl_delphi
Ekon bestof rtl_delphiEkon bestof rtl_delphi
Ekon bestof rtl_delphi
Max Kleiner
 
Chado-XML
Chado-XMLChado-XML
Chado-XML
Chris Mungall
 
Elasticsearch intro output
Elasticsearch intro outputElasticsearch intro output
Elasticsearch intro output
Tom Chen
 
What we can learn from Rebol?
What we can learn from Rebol?What we can learn from Rebol?
What we can learn from Rebol?
lichtkind
 
Introduction to clojure
Introduction to clojureIntroduction to clojure
Introduction to clojure
Abbas Raza
 
Xml
XmlXml
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformation
Lars Marius Garshol
 
Tml for Laravel
Tml for LaravelTml for Laravel
Tml for Laravel
Michael Berkovich
 
advDBMS_XML.pptx
advDBMS_XML.pptxadvDBMS_XML.pptx
advDBMS_XML.pptx
IreneGetzi
 
DATA INTEGRATION (Gaining Access to Diverse Data).ppt
DATA INTEGRATION (Gaining Access to Diverse Data).pptDATA INTEGRATION (Gaining Access to Diverse Data).ppt
DATA INTEGRATION (Gaining Access to Diverse Data).ppt
careerPointBasti
 
"If I knew then what I know now"
"If I knew then what I know now""If I knew then what I know now"
"If I knew then what I know now"
Visual Resources Association
 
The Lumber Mill Xslt For Your Templates
The Lumber Mill   Xslt For Your TemplatesThe Lumber Mill   Xslt For Your Templates
The Lumber Mill Xslt For Your Templates
Thomas Weinert
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout
source{d}
 

Similar to JLIFF: Where we are, and where we're going (20)

Jsonsaga 100605143125-phpapp02
Jsonsaga 100605143125-phpapp02Jsonsaga 100605143125-phpapp02
Jsonsaga 100605143125-phpapp02
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific Languages
 
Don't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax TreesDon't Be Afraid of Abstract Syntax Trees
Don't Be Afraid of Abstract Syntax Trees
 
Processing XML with Java
Processing XML with JavaProcessing XML with Java
Processing XML with Java
 
Symfony + GraphQL
Symfony + GraphQLSymfony + GraphQL
Symfony + GraphQL
 
Graphql + Symfony | Александр Демченко | CODEiD
Graphql + Symfony | Александр Демченко | CODEiDGraphql + Symfony | Александр Демченко | CODEiD
Graphql + Symfony | Александр Демченко | CODEiD
 
Avro
AvroAvro
Avro
 
Ekon bestof rtl_delphi
Ekon bestof rtl_delphiEkon bestof rtl_delphi
Ekon bestof rtl_delphi
 
Chado-XML
Chado-XMLChado-XML
Chado-XML
 
Elasticsearch intro output
Elasticsearch intro outputElasticsearch intro output
Elasticsearch intro output
 
What we can learn from Rebol?
What we can learn from Rebol?What we can learn from Rebol?
What we can learn from Rebol?
 
Introduction to clojure
Introduction to clojureIntroduction to clojure
Introduction to clojure
 
Xml
XmlXml
Xml
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformation
 
Tml for Laravel
Tml for LaravelTml for Laravel
Tml for Laravel
 
advDBMS_XML.pptx
advDBMS_XML.pptxadvDBMS_XML.pptx
advDBMS_XML.pptx
 
DATA INTEGRATION (Gaining Access to Diverse Data).ppt
DATA INTEGRATION (Gaining Access to Diverse Data).pptDATA INTEGRATION (Gaining Access to Diverse Data).ppt
DATA INTEGRATION (Gaining Access to Diverse Data).ppt
 
"If I knew then what I know now"
"If I knew then what I know now""If I knew then what I know now"
"If I knew then what I know now"
 
The Lumber Mill Xslt For Your Templates
The Lumber Mill   Xslt For Your TemplatesThe Lumber Mill   Xslt For Your Templates
The Lumber Mill Xslt For Your Templates
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout
 

Recently uploaded

Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
ishalveerrandhawa1
 
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdfWhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
ArgaBisma
 
Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...
BookNet Canada
 
HTTP Adaptive Streaming – Quo Vadis (2024)
HTTP Adaptive Streaming – Quo Vadis (2024)HTTP Adaptive Streaming – Quo Vadis (2024)
HTTP Adaptive Streaming – Quo Vadis (2024)
Alpen-Adria-Universität
 
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfINDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
jackson110191
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
shanthidl1
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
Eric D. Schabell
 
“Intel’s Approach to Operationalizing AI in the Manufacturing Sector,” a Pres...
“Intel’s Approach to Operationalizing AI in the Manufacturing Sector,” a Pres...“Intel’s Approach to Operationalizing AI in the Manufacturing Sector,” a Pres...
“Intel’s Approach to Operationalizing AI in the Manufacturing Sector,” a Pres...
Edge AI and Vision Alliance
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Mydbops
 
What Not to Document and Why_ (North Bay Python 2024)
What Not to Document and Why_ (North Bay Python 2024)What Not to Document and Why_ (North Bay Python 2024)
What Not to Document and Why_ (North Bay Python 2024)
Margaret Fero
 
MYIR Product Brochure - A Global Provider of Embedded SOMs & Solutions
MYIR Product Brochure - A Global Provider of Embedded SOMs & SolutionsMYIR Product Brochure - A Global Provider of Embedded SOMs & Solutions
MYIR Product Brochure - A Global Provider of Embedded SOMs & Solutions
Linda Zhang
 
Pigging Solutions Sustainability brochure.pdf
Pigging Solutions Sustainability brochure.pdfPigging Solutions Sustainability brochure.pdf
Pigging Solutions Sustainability brochure.pdf
Pigging Solutions
 
Why do You Have to Redesign?_Redesign Challenge Day 1
Why do You Have to Redesign?_Redesign Challenge Day 1Why do You Have to Redesign?_Redesign Challenge Day 1
Why do You Have to Redesign?_Redesign Challenge Day 1
FellyciaHikmahwarani
 
5G bootcamp Sep 2020 (NPI initiative).pptx
5G bootcamp Sep 2020 (NPI initiative).pptx5G bootcamp Sep 2020 (NPI initiative).pptx
5G bootcamp Sep 2020 (NPI initiative).pptx
SATYENDRA100
 
How to Avoid Learning the Linux-Kernel Memory Model
How to Avoid Learning the Linux-Kernel Memory ModelHow to Avoid Learning the Linux-Kernel Memory Model
How to Avoid Learning the Linux-Kernel Memory Model
ScyllaDB
 
Blockchain and Cyber Defense Strategies in new genre times
Blockchain and Cyber Defense Strategies in new genre timesBlockchain and Cyber Defense Strategies in new genre times
Blockchain and Cyber Defense Strategies in new genre times
anupriti
 
Navigating Post-Quantum Blockchain: Resilient Cryptography in Quantum Threats
Navigating Post-Quantum Blockchain: Resilient Cryptography in Quantum ThreatsNavigating Post-Quantum Blockchain: Resilient Cryptography in Quantum Threats
Navigating Post-Quantum Blockchain: Resilient Cryptography in Quantum Threats
anupriti
 
Data Protection in a Connected World: Sovereignty and Cyber Security
Data Protection in a Connected World: Sovereignty and Cyber SecurityData Protection in a Connected World: Sovereignty and Cyber Security
Data Protection in a Connected World: Sovereignty and Cyber Security
anupriti
 
How Netflix Builds High Performance Applications at Global Scale
How Netflix Builds High Performance Applications at Global ScaleHow Netflix Builds High Performance Applications at Global Scale
How Netflix Builds High Performance Applications at Global Scale
ScyllaDB
 
Running a Go App in Kubernetes: CPU Impacts
Running a Go App in Kubernetes: CPU ImpactsRunning a Go App in Kubernetes: CPU Impacts
Running a Go App in Kubernetes: CPU Impacts
ScyllaDB
 

Recently uploaded (20)

Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
 
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdfWhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
 
Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...Transcript: Details of description part II: Describing images in practice - T...
Transcript: Details of description part II: Describing images in practice - T...
 
HTTP Adaptive Streaming – Quo Vadis (2024)
HTTP Adaptive Streaming – Quo Vadis (2024)HTTP Adaptive Streaming – Quo Vadis (2024)
HTTP Adaptive Streaming – Quo Vadis (2024)
 
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfINDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
 
“Intel’s Approach to Operationalizing AI in the Manufacturing Sector,” a Pres...
“Intel’s Approach to Operationalizing AI in the Manufacturing Sector,” a Pres...“Intel’s Approach to Operationalizing AI in the Manufacturing Sector,” a Pres...
“Intel’s Approach to Operationalizing AI in the Manufacturing Sector,” a Pres...
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
 
What Not to Document and Why_ (North Bay Python 2024)
What Not to Document and Why_ (North Bay Python 2024)What Not to Document and Why_ (North Bay Python 2024)
What Not to Document and Why_ (North Bay Python 2024)
 
MYIR Product Brochure - A Global Provider of Embedded SOMs & Solutions
MYIR Product Brochure - A Global Provider of Embedded SOMs & SolutionsMYIR Product Brochure - A Global Provider of Embedded SOMs & Solutions
MYIR Product Brochure - A Global Provider of Embedded SOMs & Solutions
 
Pigging Solutions Sustainability brochure.pdf
Pigging Solutions Sustainability brochure.pdfPigging Solutions Sustainability brochure.pdf
Pigging Solutions Sustainability brochure.pdf
 
Why do You Have to Redesign?_Redesign Challenge Day 1
Why do You Have to Redesign?_Redesign Challenge Day 1Why do You Have to Redesign?_Redesign Challenge Day 1
Why do You Have to Redesign?_Redesign Challenge Day 1
 
5G bootcamp Sep 2020 (NPI initiative).pptx
5G bootcamp Sep 2020 (NPI initiative).pptx5G bootcamp Sep 2020 (NPI initiative).pptx
5G bootcamp Sep 2020 (NPI initiative).pptx
 
How to Avoid Learning the Linux-Kernel Memory Model
How to Avoid Learning the Linux-Kernel Memory ModelHow to Avoid Learning the Linux-Kernel Memory Model
How to Avoid Learning the Linux-Kernel Memory Model
 
Blockchain and Cyber Defense Strategies in new genre times
Blockchain and Cyber Defense Strategies in new genre timesBlockchain and Cyber Defense Strategies in new genre times
Blockchain and Cyber Defense Strategies in new genre times
 
Navigating Post-Quantum Blockchain: Resilient Cryptography in Quantum Threats
Navigating Post-Quantum Blockchain: Resilient Cryptography in Quantum ThreatsNavigating Post-Quantum Blockchain: Resilient Cryptography in Quantum Threats
Navigating Post-Quantum Blockchain: Resilient Cryptography in Quantum Threats
 
Data Protection in a Connected World: Sovereignty and Cyber Security
Data Protection in a Connected World: Sovereignty and Cyber SecurityData Protection in a Connected World: Sovereignty and Cyber Security
Data Protection in a Connected World: Sovereignty and Cyber Security
 
How Netflix Builds High Performance Applications at Global Scale
How Netflix Builds High Performance Applications at Global ScaleHow Netflix Builds High Performance Applications at Global Scale
How Netflix Builds High Performance Applications at Global Scale
 
Running a Go App in Kubernetes: CPU Impacts
Running a Go App in Kubernetes: CPU ImpactsRunning a Go App in Kubernetes: CPU Impacts
Running a Go App in Kubernetes: CPU Impacts
 

JLIFF: Where we are, and where we're going

  • 1. Chase Tingley Spartan Software, Inc JLIFF: Where we are, where we're going
  • 3. XLIFF has always been XML-based ● No abstraction independent of the syntax ● Limits our ability to reason about the format ● Limits its adoption and (possibly) longevity
  • 4. The OASIS XLIFF Object Model Other Serializations Technical Committee The XLIFF-OMOS TC & “Since December 2015”
  • 5. ● Develop an Object Model (OM) ● Develop non-XML representations of the OM ● Also in scope: ○ Mappings between different *LIFFs ○ Future versions of TMX ○ APIs related to XLIFF or related standard data exchange XLIFF-OMOS Goals
  • 6. Brief Digression The XLIFF Object Model http://blog.blprnt.com/blog/blprnt/data-in-an-alien-context-kepler-visualization-source-code
  • 7. ● Define “LIFF” independent of representation ● Streamline introduction to XLIFF/JLIFF/etc ● Standardize terminology of language interchange concepts OM Goals
  • 8. ● Working draft of prose spec ● UML of XLIFF core ● Work ongoing at https://github.com/oasis- tcs/xliff-omos-om OM Status
  • 9. OM: Partial UML Rendering
  • 10. JLIFF
  • 11. ● Ubiquitous in web service implementations ● Syntactically simple ● Widely understood ● Good tooling Why JSON?
  • 12. ● Webservices ● Online translation environments ● Data storage in JSON-based stores Use Cases
  • 13. ● Proof of concept for OM idea ● Improve availability of support for LIOM- compatible implementations in various development scenarios ● Data should be interchangeable without loss between JLIFF and XLIFF! Goals for JLIFF
  • 14. ● Simple ● Reasonably concise ● Widely supported ● Good Unicode support JSON: Strengths and Limitations ● Incompletely specified (Nicolas Seriot, “Parsing JSON is a Minefield”) ● Lack of attributes ● Difficult to express some XML concepts
  • 15. ● JSON-Schema ○ Data typing, validation ● JSON-LD ○ Namespacing Complementary Technologies
  • 16. XLIFF always works at the file level <xliff> <file id="f1"> ... </file> <file id="f2"> ... </file> </xliff>
  • 17. JLIFF is attempting a more flexible approach { "files": [...] } { "groups": [...] } { "fragment": {...} } * These representations may change ** What are the semantics of converting this to XLIFF?
  • 18. "unit": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "canResegment": { "type": "boolean", "default": "false" }, "translate": { "type": "boolean", "default": "false" }, "srcDir": { "$ref": "#/definitions/dir" }, "trgDir": { "$ref": "#/definitions/dir" }, "type": { "$ref": "#/definitions/type" }, "notes": { "$ref": "#/definitions/notes" }, "subunits": { "$ref": "#/definitions/subunits" }, "originalData": { "$ref": "#/definitions/originalData" }, }, "additionalProperties": false, "required": [ "id" ] }, Schema work has been straightforward
  • 19. <unit id="1"> <gls:glossary> <gls:glossEntry ref="#m1"> <gls:term source="publicTermbase">TAB key</gls:term> <gls:translation id="1" source="myTermbase">Tabstopptaste</gls:translation> <gls:translation ref="#m2" source="myTermbase">TAB- TASTE</gls:translation> <gls:definition source="publicTermbase">A keyboard key that is traditionally used to insert tab characters into a document. </gls:definition> </gls:glossEntry> </gls:glossary> <segment> <source>Press the <mrk id="m1" type="term">TAB key</mrk>.</source> <target>Drücken Sie die <mrk id="m2" type="term">TAB-TASTE</mrk>. </target> </segment> </unit> What about Namespaces? urn:oasis:names:tc:xliff:glossary:2.0 glossary urn:oasis:names:tc:xliff:document:2.0 segment
  • 20. Namespacing via JSON-LD { "@context": { "gls": "urn:oasis:names:tc:xliff:glossary:2.0:glossary", } } Defined at http://docs.oasis-open.org/xliff-omos/jliff/v2.1/jliff-v2.1.jsonld: { "@context": "http://docs.oasis-open.org/xliff-omos/jliff/v2.1/jliff-v2.1.jsonld", .... "gls:glossary": [ { "gls:definition": { ... } } ] } Use of a colon is a minor inconvenience for some languages (Javascript)
  • 21. ● Source, Target data are flat lists of objects ○ snippet of text ○ marker ○ inline code ● Segments, Ignorables collected as "subunits" array ● Default property values in JSON-schema make things more concise XLIFF 2.x Unit Model
  • 22. { "@context":"http://docs.oasis-open.org/xliff-omos/jliff/v2.1/jliff-v2.1.jsonld", "jliff": "2.1", "srcLang": "en", "trgLang": "de", "units": [ { "id": "u1", "subunits": [ { "source": [ { "text": "Press the " }, { "kind": "sm", "id": "m1", "type": "term" }, { "text": "TAB key" }, { "kind": "em", "startRef": "m1" }, { "text": "." } ], "target": [ ... ] }, { "type": "ignorable", "source": "<br/>" } ], A real example, part 1 Markers (These may change) Always preserve space
  • 23. "gls:glossary": [ { "ref": "m1", "term": { "text": "TAB key", "source": "publicTermbase" }, "translations": [ { "id": "1", "source": "myTermbase", "text": "Tabstopptaste" } ], "definition": { "text": "A keyboard key that is traditionally used to insert tab characters into a document.", "source": "publicTermbase" } } ] } ] } A real example, part 2
  • 24. This looks... fine to a machine {"@context":"http://docs.oasis-open.org/xliff- omos/jliff/v2.1/jliff-v2.1.jsonld", "jliff":"2.1","srcLang":"en", "trgLang":"de","units":[{"id":"u1","subunits":[{"source":[ {"text":"Press the "},{"id":"m1","kind":"sm","type": "term"},{"text":"TAB key"},{"startRef":"m1","kind":"em"}, {"text":"."}],"target":[{"text":"Drücken Sie die "}, {"id":"m2","kind":"sm","type":"term"},{"text": "TAB- TASTE"},{"startRef":"m1","kind":"em"},{"text":"."}]},{"typ e":"ignorable","source":"<br/>"}],"gls:glossary": [{"ref":"m1","term":{"text":"TAB key","source": "publicTermbase"},"translations":[{"id":"1","source": "myTermbase","text":"Tabstopptaste"}], "definition": {"text":"A keyboard key that is traditionally used to insert tab characters into a document.", "source":"publicTermbase"}}]}]}
  • 26. <mda:metadata> <mda:metaGroup category="document_xml_attribute"> <mda:meta type="version">3</mda:meta> <mda:meta type="phase">draft</mda:meta> </mda:metaGroup> </mda:metadata> Obstacle: XML Haunts Us It's just a bunch of key/value pairs!
  • 27. "mda:metadata": [ { "mda:category": "document_xml_attribute", "mda:meta": { "mda:version": 3, "mda:phase": "draft" } } ] First Attempt at JLIFF mda Simple list of metadata groups Use object properties for keys/values
  • 28. "mda:metadata": { "id": "optional-id", "mda:metaGroups": [ { "mda:category": "document_xml_attribute", "mda:meta": [ { "type": "version", "value": 3 }, { "type": "phase", "value": "draft" } ] } ] } Second Attempt at JLIFF mda Additional structure necessary XML smell
  • 29. Unfortunately, that doesn't work Duplicate type keys are possible metadata must be an object to hold this property
  • 30. "Writers that do not support a given custom namespace based user extension SHOULD preserve that extension without Modification." Obstacle: Cross-format Extension Handling This works across XLIFF/JLIFF conversion, right?
  • 31. <foo:data id="id123" xmlns:foo="urn:foo:bar"> <foo:value>50</foo:value> </foo:data> Imagine a Custom XLIFF extension This is easy to pass through in JLIFF! I can just use a local @Context declaration for the namespace, and then.... Oh. Oh dear.
  • 32. The Revenge of Untyped Values <foo:data id="id123" xmlns:foo="urn:foo:bar"> <foo:value>50</foo:value> </foo:data> "value" : 50 "value" : "50" What is the data type of this value? Is the appropriate JLIFF representation or
  • 34. ● Finish the schema! (Modules, modules) ● Write the doc! ● Implementations! (Okapi, ???) ● (Finish OM) ● (Look at other formats) Goals for 2018
  • 35. JLIFF work on GitHub: https://github.com/oasis-tcs/xliff-omos-jliff OM work on GitHub: https://github.com/oasis-tcs/xliff-omos-om Where to learn more