Open Access Metadata Open Standard (OAMOS)
![]() |
Please click here to take the survey
|
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.
![]() |
Two new ISVs, Xcase and Tembo AO Have Adopted the Open Standard OAMOS
|
![]() |
Approval College setup announcement at COMMON 2013 - RPG Open Access Metadata open standard
|
![]() |
Official announcement for v1 at COMMON 2012 - RPG Open Access Metadata open standard
|
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:
![]() |
Approval OAMOS College:
|
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.
- The XML version is described in chapter #XML_OA_Metadata_Standard
- The JSON version is described in chapter #JSON_OA_Metadata_Standard
![]() |
Opensource to convert XML to JSON and vice-versa: https://code.google.com/p/x2js/
|
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.
![]() |
![]() |
![]() |
(To download a logo, right click on it then use the option "save picture as")
Who is using the Open Standard OAMOS
- looksoftware http://www.looksoftware.com
- Tembo AO http://www.adsero-optima.com
- Xcase http://www.xcaseforsystemi.com
- End user industries in Asia, Europe and U.S.
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
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:
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
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
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.