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 DemoKetan 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 LanguageJussi 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
 

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-phpapp02Ramamohan Chokkam
 
TI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesTI1220 Lecture 14: Domain-Specific Languages
TI1220 Lecture 14: Domain-Specific LanguagesEelco 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
 
Ekon bestof rtl_delphi
Ekon bestof rtl_delphiEkon bestof rtl_delphi
Ekon bestof rtl_delphiMax 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
 
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 TemplatesThomas 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

20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 

Recently uploaded (20)

20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 

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