Open Access Metadata Open Standard (OAMOS)

From RPG Open Access Metadata Standard
Revision as of 08:02, 29 March 2015 by Pascal (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Info.png


Survey: What about enabling the RPG compiler to use an XML document instead of a DDS to get a file definition ?

Please click here to take the survey
The result of the survey will be sent to IBM and all participants.


Contents

Open Access Metadata Open Standard (OAMOS)

The standard is aimed at opening and extending the DDS format to an open XML format with any metadata (i.e.: DSPF, PRTF, PF, LF) towards modern UI.
OAMOS represents a standard to enable switches or complementary plug-ins between solutions, from ISVs to single programmers.

The structure adopted with IBM for the standard will consist of using an XML or JSON document for each record-format description. XML or JSON will contain legacy DDS definition and embed any new metadata for modern elements or properties that new devices enable.

With Open Access, you can integrate:

  • DSPF for GUI
  • PRTF for doc
  • PF/LF for web-services.

XML is already a standard for GUI or doc or web-services definition and if you need specific formats for specific device, many "processor language" like javascript, XSLT, .net, RPG, PHP etc... can interpret XML to build the final runtime or pre-runtime format.
This is the same with JSON for browser based GUI.

XML documents or JSON could be dynamic or static.
For static XML or JSON:

  • They can reside on the IFS or any server or in the cloud.
  • They can reside on a source member. (but the back side is that literals constant cannot be Unicode)

If the path of the XML or JSON document is using a known structure (like myroot + mylib/myfile/myfmt.xml or /qsys.lib/mylib.lib/mysrcfile.file/myfmt.mbr) it can be deduced at runtime otherwise a file table (CONNECTOR) will reference the XML or JSON to DDS.

Open Access allows the business logic in RPG to drive any UI and makes RPG a multitier development environment. The Metadata Open Standard allows the DESCRIPTION of advanced UIs in an IBM backed and industry standard way.


Info.png

Two new ISVs, Xcase and Tembo AO Have Adopted the Open Standard OAMOS
April 2014
Press release MC Press: http://www.mcpressonline.com/rpg/what-s-new-with-rpg-open-access-and-the-open-standard-oamos.html

Info.png

Approval College setup announcement at COMMON 2013 - RPG Open Access Metadata open standard
Tuesday, April 9, 2013: 11:00 AM-12:15 PM - Room 12A (Austin Convention Center)
https://common.confex.com/common/s13/webprogram/Session30783.html

Info.png

Official announcement for v1 at COMMON 2012 - RPG Open Access Metadata open standard
May 8, 2012 at 9:30 AM - 10:45 AM - Disneyland resort - Anaheim CA - Magic Kingdom Ballroom 2 (Disneyland Hotel )
https://common.confex.com/common/s12/webprogram/Session29652.html

This page illustrates the Open Standard originally proposed and that has evolved through a Consortium then the Approval College.
Original author: Pascal Polverini (pascal.polverini@gmail.com)

The Consortium has been opened to all main vendors and is constituted by IBM, ISV and Industry experts. In particular: Alison Butterill (IBM) Patty Clancy (IBM) Steve Will (IBM) Tim Rowe (IBM) William T Smith (IBM) Aaron Bartell Brendan Kay Clay F. Duncan Kenzie Grady P. Davis, II Harry A. van der Moere Jon Paris Les (Kungwi) Holcroft Marinus Van Sandwyk Mark Larson Paul Tuohy Pascal Polverini Rick Bovet Robert Ferguson Roland Strauss Rory Miller Susan Gantner Tommy Atkins Trevor Perry Vern Hamberg

Correlated link: IBM developerWorks - Rational Open Access. RPG Edition: http://tinyurl.com/rpg-open-access


Approval College

OAMOS content releases are approved by a college of 5 peoples:

OAmetadataStandardsquare.png

Approval OAMOS College:

  • Barbara Morris (IBM)
  • Tim Rowe (IBM)
  • Pascal Polverini
  • Jon Paris
  • Vern Hamberg



Overview

Your DDS is represented by an XML document that can be extended.

  • XML document or JSON: It contains a core part and optionally embeds new tags in the markup language to describe new objects and properties.
    • Core XML or JSON: The core XML or JSON represents any legacy DDS information.
    • New tag for new components/properties description: This will represent any UI extension for new controls or components (for instance to represent images, links, etc..). Within this embedded markup language a standard will be used to reference RPG fields values (for instance to set/get UI elements properties).
  • CONNECTOR table: This is an optional table containing references between DDS-format and XML or JSON document.

Note:

  • The Core XML or JSON will always contain at least the buffer definition of all UI fields, for legacy modernization or new development. Remember that fields buffers descriptions is all the RPG needs (and contemplates) for its compilation.
    • Legacy modernization will integrate all DDS information with all DDS keywords within the Core XML or JSON. Any UI modern extension can then be described with New tag for new components/properties description.
    • New development can still use many DDS keywords or use the Core XML or JSON to describe only fields buffer. Then use the New tag for new components/properties description for layout or any UI interaction description.

From this, any building process/technology/device can be used. The Open Standard consists on the DDS and metadata description of the UI, taking advantage of (and preserving) the multi-tier architecture of Open Access, and also of the well-understood RPG I/O model to build up and control the UI.

A standard for Display file, but also for Physical or Printer file, to describe metadata provides a major and greater offer for the IBM i community. OA Handlers and Interfaces, made by different ISVs or Open source, are then interchangeable and can inter-operate between them. End users have more options and more possibilities for customization.

With this standard, community projects can also take off because a common protocol exists to put all pieces together, then anyone (single programmers or ISV) could do a full or partial UI builder which could be plugged-in. Customers have then the possibility to use or switch different Handlers or UI.

To be OAMOS compliant your solution needs to use the open format described here or to have an import/export function to your format. See chapter #Certification


Open Standard in XML or JSON

The Open standard follows the same structure in XML as well as in JSON.


  32px-Light bulb icon tips.svg.png

Opensource to convert XML to JSON and vice-versa: https://code.google.com/p/x2js/
Online indent XML formater: http://www.freeformatter.com/xml-formatter.html
Online indent JSON formater: http://json-indent.appspot.com/


XML OA Metadata Standard

Opensource to convert XML to JSON and vice-versa: https://code.google.com/p/x2js/
Online indent XML formater: http://www.freeformatter.com/xml-formatter.html

DDS-XML (Core XML)

This standard is aimed at opening and extending the DDS format to an open format.
The description block adopted is the record-format (which is also the I/O process buffer), in XML with self-explanatory definition.
Record-format block(s) can also be embedded into file description.
The current version release is v2, a log of the v1 is available on the Discussion page (see Tab at the top).
For static XML, the XML doc can reside on the IFS (or any server or the cloud) or in a source member and its emplacement might be deduced or referenced within the CONNECTOR table.
A good practice emplacement structure is .../LibraryName/FileName/FormatName.xml
or also with type subdivision:
        .../dspfxml/LibraryName/FileName/FormatName.xml
        .../prtfxml/LibraryName/FileName/FormatName.xml
        .../pfxml/LibraryName/FileName/FormatName.xml
        .../lfxml/LibraryName/FileName/FormatName.xml
  
Here the overall structure for a Format
<Format ...>                                       Format start (1 occurrence)
   <ObjectAttributes.../>                          Object attributes block - coming from compilation options (1 occurrence)
   <Indicators>                                    Format's Indicators block (1 occurrence)
       <Indicator .../>                            (n occurrences)
   </Indicators>
   <Keywords>                                      Format's DDS Keywords block (1 occurrence)
	<Keyword .../>                              (n occurrences)
   </Keywords>
   <Fields>                                        Format's fields block (1 occurrence)
	<Field ...>                                 (n occurrences)
	    <Keywords>                              Field's DDS Keywords block (1 occurrence)
		<Keyword .../>                      (n occurrences)
	    </Keywords>
	</Field>
   </Fields>
</Format>                                          Format end
Here the overall structure for a group of Formats references (File level)
<File name="DSPF1" lib="LIB1" type="DSPF" timestamp="2013-10-06 03:18:35" version="2.0">
  <Formats>                                        Formats start (1 occurrence)
     <Format ref=".../lib/file/FMT1.xml">
     <Format ref=".../lib/file/FMT2.xml">
     <Format ref=".../lib/file/FMT3.xml"> 
  </Formats>                                       Formats end
</File>
Here the overall structure for File level DDS-keywords
<File name="DSPF1" lib="LIB1" type="DSPF">
  <Keywords>
      <Keyword name="INDARA"/>
      <Keyword name="CF03" value="03"/>
  </Keywords>
  <Indicators>
      <Indicator name="*IN03" use="I"/>
  </Indicators>
</File>

DDS-XML for Display file (dspf)

Current status: version 2.0

Premise
[All file-level keywords can be repeated at the format-level.]
All reference info (REF, REFFLD) are exploded before hand in order to expose a complete and direct definition (But this doesn't stop to still specify REF or REFFLD for reference purpose).
<Format 
 	name="..."                                      format name 
	lib="..."                                       library name
	dspf="..."                                      display-file name
        timestamp="2013-10-06 03:18:35" 
        version="2.0"
	type="NORMAL|SFLCTL|SFL|SFLMSG"
	[window="Y"] 
	mode="80|132" 
	[recasc="otherFormat"]                          cf. SFLCTL/SFL correlation
	X="1"                                           top-left
	Y="1"                                           top-left
	len="80|132|nnn"                                nnn for window
	height="24|27|nn"                               nn for window
	strRow="1"                                      top-line format
	endRow="11"                                     bottom-line format
>
	<ObjectAttributes                               object attributes block - coming from compilation options
		[CCSID="37"]                            (Use same format as crtCmd parameter: parmName="parmValue")
	/>
        <Indicators>
		<Indicator 
			name="*IN01|*IN02|...|*IN99" 
			use="I|O|B" 
		/>
	        <Indicator .../>
	</Indicators>
	<Keywords>
		<Keyword 
			[cond="51"]                                   (DDS *Indicator set in positions 7 through 16)  
			name="DDS Keyword" 
			[value="DDS Keyword parameter(s)"] 
		/>
		<Keyword .../>
	</Keywords>
	<Fields>
		<Field 
			[cond="51"]                                   (DDS *Indicator set in positions 7 through 16) 
			[name="field name"] 
			type="A|D|F|I|M|N|S|W|X|Y|E|J|O|G|const"      (for const: specify its value with DFT DDS keyword (1))
			use="I|O|B|H|P|M" 
			[X="60"]                                      top-left
			[Y="1"]                                       top-left
			len="..."                                     length
			[masklen="layout width"]                      length with sign, dec-sep, EDTCDE, EDTWRD 
		>
			<Keywords>
				<Keyword  
					[cond="51"]                   (DDS *Indicator set in positions 7 through 16)   
					name="DDS Keyword" 
					[value="DDS Keyword parameter(s)"] 
				/>
				<Keyword .../>  
			</Keywords>
		</Field>
		<Field .../>
	</Fields>
</Format>
(1) type="const":
    A                                  2  2'My text'
    ...is implicitly equivalent to:
    A                                  2  2DFT('My text')
    ...therefore, in XML, we will get:
		<Field 
			[name="const001"] 
			type="const"
			use="O" 
			X="2"
			Y="2"
			len="7"
		>
			<Keywords>
				<Keyword  
					name="DFT" 
					value="My text" 
				/>
			</Keywords>
		</Field>

DDS-XML for Printer file (prtf)

Current status: version 2.0

Premise
[All file-level keywords can be repeated at the format-level.]
All reference info (REF, REFFLD) are exploded before hand in order to expose a complete and direct definition (But this doesn't stop to still specify REF or REFFLD for reference purpose).
<Format
	name="..."                                      format name
	lib="..."                                       library name
	prtf="..."                                      printer-file name
        timestamp="2013-10-06 03:18:35" 
        version="2.0"
>
	<ObjectAttributes                               object attributes block - coming from compilation options
		[PAGESIZE="50 100 *ROWCOL"]             (Use same format as crtCmd parameter: parmName="parmValue")
		[OVRFLW="50"]                           (idem for any relevant parm-info)
	/>
	<Indicators>
		<Indicator 
			name="*IN01|*IN02|...|*IN99" 
		/>
		<Indicator .../>
	</Indicators>
	<Keywords>
		<Keyword 
			[cond="51"]                                   (DDS *Indicator set in positions 7 through 16) 
			name="DDS Keyword" 
			[value="DDS Keyword parameter(s)"] 
		/>
		<Keyword .../>
	</Keywords>
	<Fields>
		<Field 
			[cond="51"]                                   (DDS *Indicator set in positions 7 through 16)
			[name="field name"] 
			type="S|A|F|L|T|Z|O|G|const"                  (for const: specify its value with DFT DDS keyword)
			use="O|P" 
			[X="60"] 
			[Y="1"] 
			len="..."                                     length 
			[masklen="layout width"]                      length with sign, dec-sep, EDTCDE, EDTWRD 
		>
			<Keywords>
				<Keyword  
					[cond="51"]                   (DDS *Indicator set in positions 7 through 16)
					name="DDS Keyword" 
					[value="DDS Keyword parameter(s)"] 
				/>
				<Keyword .../>  
			</Keywords>
		</Field>
		<Field .../>
	</Fields>
</Format>

DDS-XML for Physical file (pf)

Current status: version 2.0

Premise
[All file-level keywords can be repeated at the format-level.]
All reference info (REF, REFFLD) are exploded before hand in order to expose a complete and direct definition (But this doesn't stop to still specify REF or REFFLD for reference purpose).
<Format
	name="..."                                      format name
	lib="..."                                       library name
	pf="..."                                        physical-file name
        timestamp="2013-10-06 03:18:35" 
        version="2.0"
>
	<ObjectAttributes                               object attributes block - coming from compilation options
		[CCSID="37"]                            (Use same format as crtCmd parameter: parmName="parmValue")
	/>
	<Keywords>
		<Keyword 
		 	name="DDS Keyword" 
			[value="DDS Keyword parameter(s)"] 
		/>
		<Keyword .../>
	</Keywords>
	<Fields>
		<Field 
			[typeName="K"]                                Key 
			name="field name" 
			type="P|S|B|F|A|H|L|T|Z|5|J|O|G" 
			[use="B|I|N"]                                 default B
			len="..."                                     length 
 			[masklen="layout width"]                      length with sign, dec-sep, EDTCDE, EDTWRD 
		>
			<Keywords>
				<Keyword  
					name="DDS Keyword" 
					[value="DDS Keyword parameter(s)"] 
				/>
				<Keyword .../>  
			</Keywords>
		</Field>
		<Field .../>
	</Fields>
</Format>

DDS-XML for Logical file (lf)

Current status: version 2.0

Premise
[All file-level keywords can be repeated at the format-level.]
All reference info (REF, REFFLD) are exploded before hand in order to expose a complete and direct definition (But this doesn't stop to still specify REF or REFFLD for reference purpose).
<Format
	name="..."                                      format name
	lib="..."                                       library name
	lf="..."                                        logical-file name
        timestamp="2013-10-06 03:18:35" 
        version="2.0"
>
	<ObjectAttributes                               object attributes block - coming from compilation options
		[CCSID="37"]                            (Use same format as crtCmd (CRTLF or CRTPF) parameter: parmName="parmValue")
	/>
	<Keywords>
		<Keyword 
			name="DDS Keyword" 
			[value="DDS Keyword parameter(s)"] 
		/>
		<Keyword .../>
	</Keywords>
	<joins>
		<join 
			name="JDUPSEQ|JField|JOIN" 
			[value="DDS Keyword parameter(s)"] 
		/>
		<join .../>
	</joins>
	<Fields>
		<Field 
			[typeName="K|S|O"]                            Key, Select, Omit 
			name="field name" 
			type="P|S|B|F|A|H|L|T|Z|5|J|O|G" 
			[use="B|I|N"]                                 default B 
			len="..."                                     length 
			[masklen="layout width"]                      length with sign, dec-sep, EDTCDE, EDTWRD 
		>
			<Keywords>
				<Keyword  
					name="DDS Keyword" 
					[value="DDS Keyword parameter(s)"] 
				/>
				<Keyword .../>  
			</Keywords>
		</Field>
		<Field .../>
	</Fields>
</Format>
DDS-XML for Multiple Format Logical file (lf)

Current status: version 2.0

Premise
All file-level keywords can be repeated at the format-level.]
All reference info (REF, REFFLD) are exploded before hand in order to expose a complete and direct definition (But this doesn't stop to still specify REF or REFFLD for reference purpose).
<MultiFormats
	lib="..."                                       library name
	lf="..."                                        logical-file name
        timestamp="2013-10-06 03:18:35" 
        version="2.0"
>
	<Format
		name="..."                              format name 
	>
		<Keywords .../>                         Keywords block (includes <Keyword>)
		<Fields .../>                           Fields block (includes <Field><Keywords><Keyword>)
	</Format>
	<Format .../>
</MultiFormats>


Modern UI component & UI properties description

Current status: version 2.0

Generic way to describe any UI component & property

<Component name="xxx">
   <Properties>
      <Property name="xxx" value="xxx"/>
   </Properties>
</Component>

The concept is to leave free the flexibility to describe any property with name="xxx" value="xxx". The name used will be self-descriptive and then enable switches between solutions without restricting any architecture or property description for today or tomorrow's technology. The <Properties/> tag can also be embedded into the <Format/> or the <Field/> tag to describe UI properties at the format or field level.

Variable description

Syntax: ${ field-name } or ${ format-name.field-name }

value="${FLD01}"
or
value="${FMT1.FLD01}"

The syntax ${...} has been inspired by the XMLi library http://sourceforge.net/projects/xmli/ ref: http://www.ibmsystemsmag.com/ibmi/developer/rpg/xmli/

HTML tagging accepted for common components

<IMG />
<A /> 

For common components the use of HTML tagging is also integrated. They could simplify the description and they may have a direct utility for displayable UI. In any case the generic way will always work for any UI (display and printer files).

Modern UI Examples

Example of Generic way to describe a UI component IMAGE:

<Format...>
   <Component name="IMAGE1">
      <Properties>
         <Property name="type" value="img"/>
         <Property name="src" value="/mydir/myimg.jpg"/>
         <Property name="position" value="absolute"/>
         <Property name="left" value="20"/>
         <Property name="top" value="10"/>
      </Properties>
   </Component>
</Format>

Same with variable:

<Format...>
   <Component name="IMAGE1">
      <Properties>
         <Property name="type" value="img"/>
         <Property name="src" value="${FLD01}"/>
         <Property name="position" value="absolute"/>
         <Property name="left" value="20"/>
         <Property name="top" value="10"/>
      </Properties>
   </Component>
</Format>

Example of a link property for an existing field:

<Format...>
   <Fields>
      <Field name="CUSTNAME" type="A" use="B" col="18" row="3" len="10">
         <Properties>
            <Property name="type" value="link"/>
            <Property name="href" value="${FLD02}"/>
         </Properties> 
      </Field>
   </Fields>
</Format>

Example of an image and a link component description with HTML tagging:

<Format...>
   <IMG src="/mydir/myimg.jpg" style="position:absolute;top:10px;left:20px;"/>
   <a href="IBMiOA.com">Open Access Metadata Open Standard</a> 
</Format>



JSON OA Metadata Standard

Opensource to convert XML to JSON and vice-versa: https://code.google.com/p/x2js/
Online indent JSON formater: http://json-indent.appspot.com/

DDS-JSON (Core JSON)

from #OAMOS_XML_sample example

{
  "Format": {
    "Keywords": {
      "Keyword": [
        {
          "_name": "CF03",
          "_value": "03"
        },
        {
          "_name": "CF04",
          "_value": "04"
        },
        {
          "_name": "PRINT"
        },
        {
          "_name": "HELP"
        }
      ]
    },
    "Indicators": {
      "Indicator": [
        {
          "_name": "*IN03",
          "_use": "I"
        },
        {
          "_name": "*IN04",
          "_use": "I"
        }
      ]
    },
    "Fields": {
      "Field": [
        {
          "Keywords": {
            "Keyword": [
              {
                "_name": "DFT",
                "_value": "Update Movie details"
              },
              {
                "_name": "COLOR",
                "_value": "WHT"
              }
            ]
          },
          "_type": "const",
          "_use": "O",
          "_X": "31",
          "_Y": "1",
          "_len": "20"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Movie ID:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "4",
          "_len": "9"
        },
        {
          "_name": "DMOVID",
          "_type": "S",
          "_use": "O",
          "_dec": "0",
          "_X": "19",
          "_Y": "4",
          "_len": "6"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Movie name:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "5",
          "_len": "11"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "CHECK",
              "_value": "LC"
            }
          },
          "_name": "DMOVNAME",
          "_type": "A",
          "_use": "B",
          "_X": "19",
          "_Y": "5",
          "_len": "50"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Company:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "6",
          "_len": "8"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "CHECK",
              "_value": "LC"
            }
          },
          "_name": "DMOVCOMP",
          "_type": "A",
          "_use": "B",
          "_X": "19",
          "_Y": "6",
          "_len": "25"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Genre:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "7",
          "_len": "6"
        },
        {
          "Keywords": {
            "Keyword": [
              {
                "_name": "VALUES",
                "_value": "'Action' 'Comedy' 'Drama' 'Horror'  'Family' 'Other'"
              },
              {
                "_name": "CHECK",
                "_value": "LC"
              }
            ]
          },
          "_name": "DMOVGENRE",
          "_type": "A",
          "_use": "B",
          "_X": "19",
          "_Y": "7",
          "_len": "25"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Release date:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "8",
          "_len": "13"
        },
        {
          "Keywords": {
            "Keyword": [
              {
                "_name": "DATFMT",
                "_value": "*DMY"
              },
              {
                "_name": "MAPVAL",
                "_value": "('01/01/40' *BLANK)"
              }
            ]
          },
          "_name": "DRELDATE",
          "_type": "L",
          "_use": "B",
          "_X": "19",
          "_Y": "8",
          "_len": "10"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Status:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "9",
          "_len": "7"
        },
        {
          "Keywords": {
            "Keyword": [
              {
                "_name": "VALUES",
                "_value": "'Filming' 'In Theatres' 'On DVD'"
              },
              {
                "_name": "CHECK",
                "_value": "LC"
              }
            ]
          },
          "_name": "DMOVSTATUS",
          "_type": "A",
          "_use": "B",
          "_X": "19",
          "_Y": "9",
          "_len": "12"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Director:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "10",
          "_len": "9"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "CHECK",
              "_value": "LC"
            }
          },
          "_name": "DMOVDIRECT",
          "_type": "A",
          "_use": "B",
          "_X": "19",
          "_Y": "10",
          "_len": "25"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Rating:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "11",
          "_len": "7"
        },
        {
          "Keywords": {
            "Keyword": [
              {
                "_name": "RANGE",
                "_value": "1 5"
              },
              {
                "_name": "EDTCDE",
                "_value": "4"
              }
            ]
          },
          "_name": "DMOVRATING",
          "_type": "Y",
          "_use": "B",
          "_dec": "0",
          "_X": "19",
          "_Y": "11",
          "_len": "1",
          "_masklen": "1"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Cover Image:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "12",
          "_len": "12"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "CHECK",
              "_value": "LC"
            }
          },
          "_name": "DMOVIMG",
          "_type": "A",
          "_use": "B",
          "_X": "19",
          "_Y": "12",
          "_len": "25"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "In stock:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "13",
          "_len": "9"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "VALUES",
              "_value": "'Y' 'N'"
            }
          },
          "_name": "DINSTOCK",
          "_type": "A",
          "_use": "B",
          "_X": "19",
          "_Y": "13",
          "_len": "1"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Release Country:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "14",
          "_len": "16"
        },
        {
          "_name": "DRELCTR",
          "_type": "A",
          "_use": "B",
          "_X": "19",
          "_Y": "14",
          "_len": "20"
        },
        {
          "Keywords": {
            "Keyword": {
              "_name": "DFT",
              "_value": "Movie Classification:"
            }
          },
          "_type": "const",
          "_use": "O",
          "_X": "41",
          "_Y": "14",
          "_len": "21"
        },
        {
          "_name": "DMOVCLA",
          "_type": "A",
          "_use": "B",
          "_X": "63",
          "_Y": "14",
          "_len": "10"
        },
        {
          "Keywords": {
            "Keyword": [
              {
                "_name": "DFT",
                "_value": "Press F4 to confirm update or Exit with F3."
              },
              {
                "_name": "COLOR",
                "_value": "RED"
              }
            ]
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "16",
          "_len": "43"
        },
        {
          "Keywords": {
            "Keyword": [
              {
                "_name": "DFT",
                "_value": "F3=Exit"
              },
              {
                "_name": "COLOR",
                "_value": "BLU"
              }
            ]
          },
          "_type": "const",
          "_use": "O",
          "_X": "2",
          "_Y": "23",
          "_len": "7"
        },
        {
          "Keywords": {
            "Keyword": [
              {
                "_name": "DFT",
                "_value": "F4=Confirm update"
              },
              {
                "_name": "COLOR",
                "_value": "BLU"
              }
            ]
          },
          "_type": "const",
          "_use": "O",
          "_X": "11",
          "_Y": "23",
          "_len": "17"
        }
      ]
    },
    "_name": "ECOPT2",
    "_lib": "YOURLIB",
    "_dspf": "WRKMOVIE",
    "_type": "NORMAL",
    "_mode": "80",
    "_CCSID": "37",
    "_X": "1",
    "_Y": "1",
    "_len": "80",
    "_height": "24",
    "_strRow": "1",
    "_endRow": "23"
  }
}

Modern UI component & UI properties description

from #Modern_UI_Examples example

{
  "Format": {
    "Component": {
      "Properties": {
        "Property": [
          {
            "_name": "type",
            "_value": "img"
          },
          {
            "_name": "src",
            "_value": "/mydir/myimg.jpg"
          },
          {
            "_name": "position",
            "_value": "absolute"
          },
          {
            "_name": "left",
            "_value": "20"
          },
          {
            "_name": "top",
            "_value": "10"
          }
        ]
      },
      "_name": "IMAGE1"
    }
  }
}

CONNECTOR table between DDS and XML or JSON

Current status: version 2.0

This table, by standard, will be named QOAMETDTA and can reside in any library in order to offer the *LIBL flexibility (multi-version, environment version etc...).

CREATE TABLE myLib/QOAMETDTA (                                       
  QOALIB CHAR(10) NOT NULL DEFAULT  ,                      
  QOAFILE CHAR(10) NOT NULL DEFAULT  ,                     
  QOAFMT CHAR(10) NOT NULL DEFAULT  ,                      
  QOATYPE CHAR(10) NOT NULL DEFAULT  ,                     
  QOAXMLPATH CHAR(256) NOT NULL DEFAULT  ,                 
  QOATIMSTP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP )            
                                                                     
  RCDFMT QOAMETDTAR ;                                                 
                                                                     
LABEL ON TABLE myLib/QOAMETDTA                                       
  IS 'Open Access Metadata' ;                   
                                                                     
LABEL ON COLUMN myLib/QOAMETDTA                                      
( QOALIB IS 'Library' ,                                               
  QOAFILE IS 'File' ,                                                 
  QOAFMT IS 'Format' ,                                                
  QOATYPE IS 'File type' ,               
  QOAXMLPATH IS 'XML or JSON metadata doc path' , 
  QOATIMSTP IS 'Timestamp' ) ;                   
                                                
LABEL ON COLUMN myLib/QOAMETDTA                 
( QOALIB TEXT IS 'Library' ,                     
  QOAFILE TEXT IS 'File' ,                       
  QOAFMT TEXT IS 'Format' ,                      
  QOATYPE TEXT IS 'File type DSPF/PRTF/PF/LF' ,  
  QOAXMLPATH TEXT IS 'XML or JSON metadata doc path' ,   
  QOATIMSTP TEXT IS 'Timestamp' ) ;       

(Equivalent to:)

 *  Open Access Metadata Connector table                            
 *                                                                  
 *  Library..: *LIBL                                                                
 *  File.....: QOAMETDTA                                                                
 *  Key(s)...: Lib, File, Format 
 *                                         
 *  1 XML document per Format.                          
 *  QOAXMLPATH represents the path of the XML doc.                  
 *                                                                  
A          R QOAMETDTAR                                             
A            QOALIB        10          TEXT('Library')              
A                                      COLHDG('Library')            
A            QOAFILE       10          TEXT('File')                 
A                                      COLHDG('File')               
A            QOAFMT        10          TEXT('Format')               
A                                      COLHDG('Format')             
A            QOATYPE       10          TEXT('File type DSPF/PRTF/PF/LF')               
A                                      COLHDG('File type')             
A            QOAXMLPATH   256          TEXT('XML metadata doc path')    
A                                      COLHDG('XML or JSON metadata' 'doc path')
A            QOATIMSTP       Z         TEXT('Timestamp')            
A                                      COLHDG('Timestamp')          
A          K QOALIB                                                 
A          K QOAFILE                                                 
A          K QOAFMT  


optional CONNECTOR table for Customizations

Current status: version 2.0

CREATE TABLE myLib/QOAMETDTAC (                          
  QOALIB CHAR(10) NOT NULL DEFAULT  ,          
  QOAFILE CHAR(10) NOT NULL DEFAULT  ,         
  QOAFMT CHAR(10) NOT NULL DEFAULT  ,          
  QOATYPE CHAR(10) NOT NULL DEFAULT  ,         
  QOAXMLPATH CHAR(256) NOT NULL DEFAULT  ,     
  QOATIMSTP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  QOALANGID CHAR(10) NOT NULL DEFAULT  ,       
  QOACNTRYID CHAR(10) NOT NULL DEFAULT  ,      
  QOAUSERID CHAR(10) NOT NULL DEFAULT  )       
                                                          
  RCDFMT QOAMETDTCR ;                           
                                                
LABEL ON TABLE myLib/QOAMETDTAC                
  IS 'Open Access Metadata Customised' ;        
                                                
LABEL ON COLUMN myLib/QOAMETDTAC               
( QOALIB IS 'Library' ,                         
  QOAFILE IS 'File' ,                           
  QOAFMT IS 'Format' ,                          
  QOATYPE IS 'File type' ,                      
  QOAXMLPATH IS 'XML metadata doc path' ,
  QOATIMSTP IS 'Timestamp' ,                    
  QOALANGID IS 'Language ID' ,                  
  QOACNTRYID IS 'Country ID' ,                  
  QOAUSERID IS 'User ID' ) ;                    
                                               
LABEL ON COLUMN myLib/QOAMETDTAC               
( QOALIB TEXT IS 'Library' ,                    
  QOAFILE TEXT IS 'File' ,                      
  QOAFMT TEXT IS 'Format' ,                     
  QOATYPE TEXT IS 'File type DSPF/PRTF/PF/LF' ,
  QOAXMLPATH TEXT IS 'XML or JSON metadata doc path' , 
  QOATIMSTP TEXT IS 'Timestamp' ,              
  QOALANGID TEXT IS 'Language ID' ,            
  QOACNTRYID TEXT IS 'Country ID' ,            
  QOAUSERID TEXT IS 'User ID' ) ;    

(Equivalent to:)

 *  Open Access Metadata Connector table for Customizations         
 *      
 *  Library..: *LIBL                                                          
 *  File.....: QOAMETDTAC           
 *  Key(s)...: Lib, File, Format, [Language], [Country], [User]           
 *
 *  1 XML document per Format.                          
 *  QOAXMLPATH represents the path of the cutomised XML doc.        
 *                                                                  
A          R QOAMETDTCR                                             
A            QOALIB        10          TEXT('Library')              
A                                      COLHDG('Library')            
A            QOAFILE       10          TEXT('File')                 
A                                      COLHDG('File')               
A            QOAFMT        10          TEXT('Format')               
A                                      COLHDG('Format')             
A            QOATYPE       10          TEXT('File type DSPF/PRTF/PF/LF')               
A                                      COLHDG('File type') 
A            QOAXMLPATH   256          TEXT('XML or JSON metadata doc path')    
A                                      COLHDG('XML metadata' 'doc path')
A            QOATIMSTP       Z         TEXT('Timestamp')            
A                                      COLHDG('Timestamp')          
A            QOALANGID     10          TEXT('Language ID')          
A                                      COLHDG('Language ID')        
A            QOACNTRYID    10          TEXT('Country ID')   
A                                      COLHDG('Country ID') 
A            QOAUSERID     10          TEXT('User ID')      
A                                      COLHDG('User ID')    
A          K QOALIB                                         
A          K QOAFILE                                         
A          K QOAFMT                                         
A          K QOALANGID     
A          K QOACNTRYID    
A          K QOAUSERID


Certification

To be OAMOS compliant your solution needs to use the format described in this wiki or to have an import/export function to your format.

Certification Logos

Here below the logos that you are entitled to use with solutions or products integrating the OA Metadata Open Standard (OAMOS).
You can associate the current wiki URL ( http://www.IBMiOA.com ) to the logos.

OA metadata open access logo OA metadata open access logo OA metadata open access logo

(To download a logo, right click on it then use the option "save picture as")

Who is using the Open Standard OAMOS


If you use OAMOS and want to appear on this list, please contact us.

RPG - a Modern Business Language

RPG is a business language because independent of technology changes

  • Open Access frees the CONTROL of RPG to any UI (and it renders RPG truly multi-tier)
  • The Metadata Open Standard frees the DESCRIPTION to any UI


With these 2 assets and the centrality of RPG with the OS you get a very attractive language:
RPG - a modern business language RPG smart language

Why Open Access and Open Standard are strategic

More about XML

  • It is a platform independent language.
  • It uses human, not computer, language. XML is readable and understandable, even by novices, and no more difficult to code than HTML.
  • XML can be fully compatible with legacy or new applications, and it can be combined with any application which is capable of processing XML *irrespective of the platform it is being used on.
  • XML is an extremely portable language to the extent that it can be used on large networks with multiple platforms like the internet, and it can be used on handhelds or palmtops or PDAs.
  • XML is an extendable language, meaning that you can create your own tags, or use the tags which have already been created.
  • It can be deployed on any network if it is amicable for usage with the application in use.
  • If the application can work along with XML, then XML can work on any platform and has no boundaries.
  • It is also vendor independent and system independent. While data is being exchanged using XML, there will be no loss of data even between systems that use totally different formats.
  • XML standards and extensions: IBM info center http://pic.dhe.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Frzamj%2Frzamjintroadvantages.htm



XSLT to HTML5 and JSON Proof Of Concept

Copy/past the XML and XSLT on http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog to see the result online.
Here a simple proof of concept of an XSLT to HTML5 and JSON tagging for OAMOS XML display format:

Note: This is a proof of concept to show that an open "processor" like XSLT can interpret OAMOS - Real situations can use any other "processors", javascript, .net etc...

XSLT

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<div class="Format"> 
<!-- Here a data-Format and data-Formatnames HTML5 customized attributes are created  
to contain the qualified name and DDS keywords for the format in JSON (name="data-Formatnames"). --> 
<!-- Compactness can be gain in removing white characters (
 	 
) -->
<!-- The same concept can be repeated to XSLTransform DDS keywords for field -->
<xsl:attribute name="data-Format">
{"Format":[
{
<xsl:if test="Format/@name">"name":"<xsl:value-of select='Format/@name' />",</xsl:if>
<xsl:if test="Format/@lib">"lib":"<xsl:value-of select='Format/@lib' />",</xsl:if>
<xsl:if test="Format/@dspf">"dspf":"<xsl:value-of select='Format/@dspf' />",</xsl:if>
},
]}
</xsl:attribute>
<xsl:attribute name="data-Formatnames">
{"Formatname":[
<xsl:for-each select="Format/Formatnames/Formatname">
 {
 <xsl:if test="@cond">"cond":"<xsl:value-of select='@cond' />",</xsl:if>
 <xsl:if test="@name">"name":"<xsl:value-of select='@name' />",</xsl:if>
 <xsl:if test="@value">"value":"<xsl:value-of select='@value' />",</xsl:if>
 },
</xsl:for-each>                
]}
</xsl:attribute>
</div>
<xsl:for-each select="Format/Fields/Field">
 <xsl:choose>
 <xsl:when test="@type = 'const'">
  <span 
  class="constant" 
  style="position:absolute; top:{(@Y * 25)}px; left:{(@X * 11)}px;"
  >
  <xsl:value-of select="Keywords/Keyword[@name = 'DFT']/@value" />
  </span>
 </xsl:when>
  <xsl:when test="@use = 'O'">
  <input 
  class="readonly"
  readonly="1"  
  name="{@name}" 
  style="position:absolute;top:{(@Y * 25)}px; left:{(@X * 11)}px;"
  size="{@len}" maxlength="{@len}"
  />
 </xsl:when>
 <xsl:when test="@use = 'B' or @use = 'I'">
  <input 
  class="editable"
  name="{@name}" 
  style="position:absolute;top:{(@Y * 25)}px; left:{(@X * 11)}px;"
  size="{@len}" maxlength="{@len}"
  />
 </xsl:when>
  <xsl:when test="@use = 'H'">
  <input 
  class="hidden"
  type="hidden"
  name="{@name}" 
  size="{@len}" maxlength="{@len}"
  />
 </xsl:when>
 <xsl:otherwise>
 </xsl:otherwise>
 </xsl:choose>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

OAMOS XML sample

<?xml version="1.0" encoding="UTF-8"?>
<Format name="ECOPT2" lib="YOURLIB" dspf="WRKMOVIE" type="NORMAL" mode="80" CCSID="37" X="1" Y="1" len="80" height="24" strRow="1" endRow="23">
<Keywords>
 <Keyword name="CF03" value="03"/>
 <Keyword name="CF04" value="04"/>
 <Keyword name="PRINT"/>
 <Keyword name="HELP"/>
</Keywords>
<Indicators>
 <Indicator name="*IN03" use="I"/>
 <Indicator name="*IN04" use="I"/>
</Indicators>
<Fields>
<Field type="const" use="O" X="31" Y="1" len="20">
 <Keywords>
  <Keyword name="DFT" value="Update Movie details"/>
  <Keyword name="COLOR" value="WHT"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="4" len="9">
 <Keywords>
  <Keyword name="DFT" value="Movie ID:"/>
 </Keywords>
 </Field>
<Field name="DMOVID" type="S" use="O" dec="0" X="19" Y="4" len="6">
</Field>
<Field type="const" use="O" X="2" Y="5" len="11">
 <Keywords>
  <Keyword name="DFT" value="Movie name:"/>
 </Keywords>
</Field>
<Field name="DMOVNAME" type="A" use="B" X="19" Y="5" len="50">
 <Keywords>
  <Keyword name="CHECK" value="LC"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="6" len="8">
 <Keywords>
  <Keyword name="DFT" value="Company:"/>
 </Keywords>
</Field>
<Field name="DMOVCOMP" type="A" use="B" X="19" Y="6" len="25">
 <Keywords>
  <Keyword name="CHECK" value="LC"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="7" len="6">
 <Keywords>
  <Keyword name="DFT" value="Genre:"/>
 </Keywords>
</Field>
<Field name="DMOVGENRE" type="A" use="B" X="19" Y="7" len="25">
 <Keywords>
  <Keyword name="VALUES" value="'Action' 'Comedy' 'Drama' 'Horror'  'Family' 'Other'"/>
  <Keyword name="CHECK" value="LC"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="8" len="13">
 <Keywords>
  <Keyword name="DFT" value="Release date:"/>
 </Keywords>
</Field>
<Field name="DRELDATE" type="L" use="B" X="19" Y="8" len="10">
 <Keywords>
  <Keyword name="DATFMT" value="*DMY"/>
  <Keyword name="MAPVAL" value="('01/01/40' *BLANK)"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="9" len="7">
 <Keywords>
  <Keyword name="DFT" value="Status:"/>
  </Keywords>
</Field>
<Field name="DMOVSTATUS" type="A" use="B" X="19" Y="9" len="12">
 <Keywords>
  <Keyword name="VALUES" value="'Filming' 'In Theatres' 'On DVD'"/>
  <Keyword name="CHECK" value="LC"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="10" len="9">
 <Keywords>
  <Keyword name="DFT" value="Director:"/>
 </Keywords>
</Field>
<Field name="DMOVDIRECT" type="A" use="B" X="19" Y="10" len="25">
 <Keywords>
  <Keyword name="CHECK" value="LC"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="11" len="7">
 <Keywords>
  <Keyword name="DFT" value="Rating:"/>
 </Keywords>
</Field>
<Field name="DMOVRATING" type="Y" use="B" dec="0" X="19" Y="11" len="1" masklen="1">
 <Keywords>
  <Keyword name="RANGE" value="1 5"/>
  <Keyword name="EDTCDE" value="4"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="12" len="12">
 <Keywords>
  <Keyword name="DFT" value="Cover Image:"/>
 </Keywords>
</Field>
<Field name="DMOVIMG" type="A" use="B" X="19" Y="12" len="25">
 <Keywords>
  <Keyword name="CHECK" value="LC"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="13" len="9">
 <Keywords>
  <Keyword name="DFT" value="In stock:"/>
 </Keywords>
</Field>
<Field name="DINSTOCK" type="A" use="B" X="19" Y="13" len="1">
 <Keywords>
  <Keyword name="VALUES" value="'Y' 'N'"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="14" len="16">
 <Keywords>
  <Keyword name="DFT" value="Release Country:"/>
 </Keywords>
</Field>
<Field name="DRELCTR" type="A" use="B" X="19" Y="14" len="20">
</Field>
<Field type="const" use="O" X="41" Y="14" len="21">
 <Keywords>
  <Keyword name="DFT" value="Movie Classification:"/>
 </Keywords>
</Field>
<Field name="DMOVCLA" type="A" use="B" X="63" Y="14" len="10">
</Field>
<Field type="const" use="O" X="2" Y="16" len="43">
 <Keywords>
  <Keyword name="DFT" value="Press F4 to confirm update or Exit with F3."/>
  <Keyword name="COLOR" value="RED"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="2" Y="23" len="7">
 <Keywords>
  <Keyword name="DFT" value="F3=Exit"/>
  <Keyword name="COLOR" value="BLU"/>
 </Keywords>
</Field>
<Field type="const" use="O" X="11" Y="23" len="17">
 <Keywords>
  <Keyword name="DFT" value="F4=Confirm update"/>
  <Keyword name="COLOR" value="BLU"/>
 </Keywords>
</Field>
</Fields>
</Format>

Note: Another way to merge the XML with the XSLT is to reference the XSLT directly within the XML: (then you can directly open the XML within a browser that will transform it in HTML5)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="myXSLT.xsl"?>


screenshots:

DDS - 5250
XML - XSLT simple example

Press release

Life After DDS - Published: March 17, 2015 - IBM Systems Magazine:
http://www.ibmsystemsmag.com/ibmi/developer/rpg/oamos-intro/

What's New with RPG Open Access and the Open Standard (OAMOS)? - Published: April 2, 2014 - MC Press:
http://www.mcpressonline.com/rpg/what-s-new-with-rpg-open-access-and-the-open-standard-oamos.html

The Open Standard for RPG OA Metadata - Published: January 9, 2013 - IBM Systems Magazine:
http://ibmsystemsmag.com/ibmi/developer/rpg/oa_standard/

DB2 For i Modernization Gets Assist From RPG OA - Published: June 25, 2012 - ITjungle:
http://www.itjungle.com/tfh/tfh062512-printer02.html

New RPG Open Access Standard Depends On XML - Published: May 14, 2012 - ITjungle:
http://www.itjungle.com/tfh/tfh051412-story02.html



Correlated links

Rational Open Access - RPG Edition: http://tinyurl.com/rpg-open-access

XMLi library: http://sourceforge.net/projects/xmli/ http://www.ibmsystemsmag.com/ibmi/developer/rpg/xmli/

linkedin group - IBM i RPG OA (Open Access) http://www.linkedin.com/groups/IBM-i-RPG-OA-Open-3059382

Blog - http://blog.looksoftware.com/blog/bid/288311/RPG-Open-Access-standards-body

XML and XSLT: http://www.w3schools.com/xml/xml_xsl.asp

XML-INTO: http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/c0925086817.htm

XML-SAX http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/c0925086822.htm

JSON SERVICE PROGRAM for RPG http://rpgnextgen.com/index.php?content=json

Some comments from the IBM i community

"Our IBM i clients have always had a very strong community, with many highly-skilled developers in the customer and ISV ranks. When IBM created RPG Open Access, it was a key design point that IBM would provide a very open interface. It is our belief that creating detailed interface specifications from IBM would limit openness and innovation.
We anticipated that the community would find ways to work together, much the same way they and others have worked in the open source community, to create material which benefits the customers we serve. The OA Metadata standard, together with the many RPG OA solutions being written by customers and vendors, represent the kind of work we hoped and expected would result from this open community approach."
Steve Will - Chief Architect - IBM i Operating System

"The promise of RPG Open Access is to enhance the strong future of RPG. As the community learns more, they will be looking for guidance on how best to leverage and use OA in their applications. An open standard will be a first step towards community wide adoption of OA, and will provide a quick jump to best practices for OA."
Trevor Perry

"We are very interested and definitely planning in developing integration EGL in RPGOA. A good and complete standard on the DDS meta data is necessary to make the integration successful!"
Harry A. van der Moere CPIM - Manager Development, Imtech ICT Application Solutions

"It is good to see this type of life in the RPG community. I have a lot of respect for the positive attitude Pascal approaches initiatives with and hope that this initiative is one more way for the RPG community to grow and stay relevant."
Aaron Bartell

"With other technologies like .NET or XUI (Java, PHP, etc...) that uses XML to describe the UI, this standard is heading in the right direction, and will be hugely beneficial to ISV's and new IBMi users."
Rick Bovet - Development Manager - ECI Software solution

"RPG Open Access has greatly enhanced RPG development and significantly increases the number of problems that RPG solves well. The Open Access Metadata Open Standard helps to ensure that customers get even more value from Open Access. The Open Standard ensures that solutions are extensible and flexible and avoids the pitfalls of proprietary formats that only envisage and support a single device type."
Brendan Kay - CEO - looksoftware

"TEMBO is excited about OAMOS, due to the immense promise it holds to provide a solid foundation to extract maximum value from the metadata of our heritage systems. The standard is used to combine our proud history with our bright future taking IBM i based applications to the next level on IBM PureSystems. The metadata and all associated attributes and behaviour is thus leveraged at levels of our modernized or new applications at all tiers, be it database, at a logic component layer or at UI/UX".
Marinus van Sandwyk - Founder & CTO, Tembo Technology Lab (Pty) Ltd.