Difference between revisions of "LRM XML Support"

From Lingoport Wiki
Jump to: navigation, search
(Limitations of XML Definition)
(Limitations of XML Definition)
Line 23: Line 23:
 
There are structural limitations to xml files that can be parsed by LRM.
 
There are structural limitations to xml files that can be parsed by LRM.
 
* The element containing the key must be before the value element. For example, the following is an xml file that cannot be parsed by LRM:
 
* The element containing the key must be before the value element. For example, the following is an xml file that cannot be parsed by LRM:
<!-- xml file that cannot be parsed by LRM because the value is before the key -->
 
 
<?xml version='1.0' encoding='utf-8'?>
 
<?xml version='1.0' encoding='utf-8'?>
  +
<!-- xml file that cannot be parsed by LRM because the value is before the key -->
 
<root>
 
<root>
 
<entry>
 
<entry>
Line 35: Line 35:
 
</entry>
 
</entry>
 
</root>
 
</root>
  +
* The keys and values can only be defined by, at most, one element each. For example, the following is a xml file that cannot be parsed by LRM:
* [[LRM_XML_Support#Tokens_cannot_appear_more_than_once_in_the_xmlParser.xml_file|Tokens can only be defined once]]
 
  +
<?xml version='1.0' encoding='utf-8'?>
* [[LRM_XML_Support#TOKEN_KEY_cannot_have_more_than_1_parent|The TOKEN_KEY can have, at most, 1 parent]]
 
  +
<!-- xml file that cannot be parsed by LRM because the key/values are
* [[LRM_XML_Support#TOKEN_TRANSLATABLE_cannot_be_an_attribute_of_an_non-key.2C_non-value_element|TOKEN_TRANSLATABLE must be an attribute of either the TOKEN_KEY element or the TOKEN_VALUE element]]
 
  +
contained within both the '''data''' and the '''key''' elements -->
  +
<root>
  +
<entry>
  +
<data name="key1">Value for key 1</data>
  +
</entry>
  +
<entry>
  +
<key name="key2">Value for key 2</key>
  +
</entry>
  +
</root>
  +
* If there is a flag that indicates whether the key should be translated, then this flag must be an attribute of either the key element or the value element. For example, the following is a xml file that cannot be parser by LRM:
 
* At most, 4 elements will be defined; root element, parent of key element, key element and value element.
 
* At most, 4 elements will be defined; root element, parent of key element, key element and value element.
   

Revision as of 20:36, 1 September 2017

Formatting xml files

LRM uses the xmlParser.xml file to parse any extensions that have a xml parser type. This file is located in the ../L10nStreamlining/<group>/projects/<project>/config folder.

XML Parser Syntax

The xmlParser.xml directs LRM on the location of the keys and values within the xml files as well as whether the key/value is translatable. The xml syntax is defined by 3 tokens:

  • TOKEN_KEY is required and can be defined as either an attribute or a text node. For example:
    • <data>TOKEN_KEY</data>
    • <entry name="TOKEN_KEY"></entry>
  • TOKEN_TRANSLATABLE is optional and can only be defined as an attribute. For example:
    • <key name="TOKEN_KEY" istrans="TOKEN_TRANSLATABLE"></key>
  • TOKEN_VALUE is required and can only be defined as a text node. For example:
    • <value>TOKEN_VALUE</value>

Limitations of XML Definition

There are structural limitations to xml files that can be parsed by LRM.

  • The element containing the key must be before the value element. For example, the following is an xml file that cannot be parsed by LRM:
<?xml version='1.0' encoding='utf-8'?>
<!-- xml file that cannot be parsed by LRM because the value is before the key -->
<root>
  <entry>
    <value>This is the value for key1</value>
    <key>key1</key>
  </entry>
  <entry>
    <value>This is the value for key2</value>
    <key>key2</key>
  </entry> 
</root>
  • The keys and values can only be defined by, at most, one element each. For example, the following is a xml file that cannot be parsed by LRM:
<?xml version='1.0' encoding='utf-8'?>
<!-- xml file that cannot be parsed by LRM because the key/values are 
   contained within both the data and the key elements -->
 <root>
   <entry>
      <data name="key1">Value for key 1</data>
   </entry>
   <entry>
      <key name="key2">Value for key 2</key>
   </entry> 
 </root>
  • If there is a flag that indicates whether the key should be translated, then this flag must be an attribute of either the key element or the value element. For example, the following is a xml file that cannot be parser by LRM:
  • At most, 4 elements will be defined; root element, parent of key element, key element and value element.

OTB XML Parser Definitions

There are 3 out-of-the-box parser definitions for XML files.

Unique XML Parser Definitions

There are several layout combinations that can be used to define your unique xml file.

AndroidParser.xml structure

The AndroidParser.xml file defines the structure of Android files.

Sample Android xml file

A typical Android file has the following structure:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name=""hello_world"" translatable=""true"">Hello World</string>
  <string name=""goodbye"" translatable=""true"">Good Bye</string>
</resources>

Parser definition for Android files

For Android files, the value is the text node of the element of the key attribute:

<?xml version='1.0' encoding='utf-8'?>
<resources>
  <string name="TOKEN_KEY" translatable="TOKEN_TRANSLATABLE">TOKEN_VALUE</string>
</resources>

ResxParser.xml structure

The ResxParser.xml file defines the structure of .resx xml files.

Sample Resx xml file

A typical Resx file has the following structure:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <data name="hello_world"> 
    <value>Hello World</value>
  
  <data name="goodbye"> 
    <value>Good Bye</value>
  
 </root>

Parser definition for Resx files

For Resx files, the element of the key attribute is the parent of the value element:

<?xml version='1.0' encoding='utf-8'?>
 <root>
   <data name="TOKEN_KEY" >
     <value>TOKEN_VALUE</value>
   
 </root>

RxmlParser.xml structure

The RxmlParser.xml file defines the structure of .rxml xml files.

Sample Rxml xml file

A typical Rxml file has the following structure:

<?xml version="1.0" encoding="UTF-8"?>
<properties>
   <entry key="hello_world">Hello World</entry>
   <entry key="goodbye">Good Bye</entry>
</properties>

Parser definition for Rxml files

  <?xml version="1.0" encoding="UTF-8"?>
  <properties>
    <entry key="TOKEN_KEY">TOKEN_VALUE</entry>
  </properties>

Invalid xmlParser.xml Examples

TOKEN_VALUE cannot be defined before TOKEN_KEY

 <?xml version='1.0' encoding='utf-8'?>
 <data>
    <value>TOKEN_VALUE</value>
    <entry>TOKEN_KEY</entry>
 </data>

Tokens cannot appear more than once in the xmlParser.xml file

 <?xml version='1.0' encoding='utf-8'?>
 <root>
    <string name="TOKEN_KEY">TOKEN_VALUE</string>
    <value>TOKEN_VALUE</value>
 </root>

TOKEN_KEY cannot have more than 1 parent

 <?xml version='1.0' encoding='utf-8'?>
 <root>
     <parent1>
        <parent2>
           <string name="TOKEN_KEY">TOKEN_VALUE</string>
         </parent2>
      </parent1>
 </root>

TOKEN_TRANSLATABLE cannot be an attribute of an non-key, non-value element

A xml file that has the isTranslatable flag set in its own element is not supported by LRM

 <?xml version='1.0' encoding='utf-8'?>
 <root>
    <data>
       <string name="TOKEN_KEY">TOKEN_VALUE</string>
       <info istrans="TOKEN_TRANSLATABLE"></info>
     </data>
 </root>

Number of elements cannot exceed 4

The only content in the xmlParser.xml is information leading to location of key/values. No other information is necessary.

 <?xml version='1.0' encoding='utf-8'?>
 <root>
    <data>
       <key>TOKEN_KEY</key>
       <string>TOKEN_VALUE</string>
       <addtlInfo></addtInfo>
     </data>
 </root>