EDI

   



XML and OAG

The Open Application Group (OAG) is an organization whose mission is to simplify integration processes between business systems. OAG frequently addresses integration issues as they apply to enterprise resource planning (ERP), accounting, and human resource packaged application systems.

OAG has defined a set of XML DTDs and is promoting these document definitions as standards for business documents such as purchase orders and invoices. They have also defined intersystem document types, such as journal transactions to a general ledger system. Business applications that support these document definitions can reliably integrate with other systems, even when the two systems come from distinct vendors.

For example, an accounts payable system from one vendor can generate an XML document that conforms to OAG's DTD specification for journals. An OAG-compliant general ledger from another system can accept that document as input, and post the transactions in an appropriate manner.

The following is a sample journal DTD from OAG. It has been simplified slightly from its complete representation.

Our sample begins with a pair of base DTDs named domains.dtd, and fields.dtd. These define the basic data type entity (STRDOM) and the field-level entity names that will be used in the OAG documents.

<!-- String Data: Generic Data Domains --> <!ENTITY % STRDOM "(#PCDATA)"> <!ELEMENT ACCTPERIOD  %STRDOM;> <!ELEMENT ACCTTYPE   %STRDOM;> <!ELEMENT ACCTYEAR   %STRDOM;> <!ELEMENT BUSNAREA   %STRDOM;> <!ELEMENT COSTCENTER  %STRDOM;> <!ELEMENT CURRENCY   %STRDOM;> <!ELEMENT DRCR     %STRDOM;> <!ELEMENT DEPARTMENT  %STRDOM;> <!ELEMENT GLENTITYS  %STRDOM;> <!ELEMENT GLNOMACCT  %STRDOM;> <!ELEMENT NUMOFDEC   %STRDOM;> <!ELEMENT ORIGREF   %STRDOM;> <!ELEMENT SIGN     %STRDOM;> <!ELEMENT USERID    %STRDOM;> <!ELEMENT USERAREA   %STRDOM;> <!ELEMENT VALUE    %STRDOM;> <!ELEMENT VALUECLASS  %STRDOM;> <!ELEMENT VERB     %STRDOM;>

Next, our sample contains a higher-level reusable DTD named segments.dtd. Of particular interest in the segment DTD are these elements:

AMOUNT: A general-purpose element that will contain an amount data item. An AMOUNT is a collection of the VALUE, NUMOFDEC, SIGN, CURRENCY, and DRCR elements. It has a required attribute named qualifier. This attribute can contain either of the types defined by the SEG_AMOUNT_QUALIFIERS entity or the type defined by a generic entity named SEG_AMOUNT_QUALIFIERS_EXTENSION. AMOUNT also has an attribute named type. This attribute can contain either of the values in the SEG_AMOUNT_TYPES entity or the value defined by a generic entity named SEG_AMOUNT_TYPES_EXTENSION.

DATETIME: A general-purpose element that contains a date-time data item. A DATETIME is a collection of the YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, SUBSECOND, and TIMEZONE elements. It has a required attribute named qualifier. This attribute can contain either of the types defined by the SEG_DATETIME_
QUALIFIERS entity or the type defined by a generic entity named SEG_DATETIME_QUALIFIERS_EXTENSION. DATETIME also has an attribute named type. This attribute can contain either of the values in the SEG_DATETIME_TYPES entity or the value defined by a generic entity named SEG_DATETIME_TYPES_EXTENSION.

<!-- -From oagis_segments.dtd --> <!-- AMOUNT --> <!ENTITY % SEG_AMOUNT_QUALIFIERS_EXTENSION "OTHER"> <!ENTITY % SEG_AMOUNT_QUALIFIERS "(ACTUAL | APPRVORD | AVAILABLE | BUDGET | COMMISSION | DISCNT | DOCUMENT | EXTENDED | ITEM | OPENITEM | ORDER | ORDLIMIT | TAX | TAXBASE | TOTLIMIT | %SEG_AMOUNT_QUALIFIERS_EXTENSION;)"> <!ENTITY % SEG_AMOUNT_TYPES_EXTENSION "OTHER"> <!ENTITY % SEG_AMOUNT_TYPES "(T | F | %SEG_AMOUNT_TYPES_EXTENSION;)"> <!ELEMENT AMOUNT (VALUE, NUMOFDEC, SIGN, CURRENCY, DRCR)> <!ATTLIST AMOUNT qualifier %SEG_AMOUNT_QUALIFIERS; #REQUIRED type %SEG_AMOUNT_TYPES; #REQUIRED index CDATA #IMPLIED> <!ENTITY % AMOUNT.ACTUAL.F  "AMOUNT"> <!ENTITY % AMOUNT.ACTUAL.T  "AMOUNT"> <!ENTITY % AMOUNT.DOCUMENT.T "AMOUNT"> <!-- DATETIME --> <!ENTITY % SEG_DATETIME_QUALIFIERS_EXTENSION "OTHER"> <!ENTITY % SEG_DATETIME_QUALIFIERS "(ACCOUNTING | AVAILABLE | CREATION | DELIVACT | DELIVSCHED | DISCNT | DOCUMENT | DUE | EFFECTIVE | EXECFINISH | EXECSTART | EXPIRATION | FORECASTF | FORECASTS | FROM | INVOICE | LABORFINSH | LABORSTART | LASTUSED | LOADING | MATCHING | NEEDDELV | OPFINISH | OPSTART | PAYEND | PROMDELV | PROMSHIP | PYMTTERM | REPORTNGFN | REPORTNGST | REQUIRED | RESORCDWNF | RESORCDWNS | SETUPFINSH | SETUPSTART | SHIP | TEARDOWNF | TEARDOWNS | TO | %SEG_DATETIME_QUALIFIERS_EXTENSION;)"> <!ENTITY % SEG_DATETIME_TYPES_EXTENSION "OTHER"> <!ENTITY % SEG_DATETIME_TYPES "(T | F | %SEG_DATETIME_TYPES_EXTENSION;)"> <!ELEMENT DATETIME (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, 
SUBSECOND, TIMEZONE)> <!ATTLIST DATETIME qualifier %SEG_DATETIME_QUALIFIERS; #REQUIRED type %SEG_DATETIME_TYPES; #IMPLIED index CDATA #IMPLIED> <!ENTITY % DATETIME.ACCOUNTING "DATETIME"> <!ENTITY % DATETIME.DOCUMENT "DATETIME"> <!ENTITY % DATETIME.PAYEND "DATETIME"> <!-- BSR --> <!ELEMENT BSR (VERB, NOUN, REVISION)> <!-- SENDER --> <!ELEMENT SENDER (LOGICALID, COMPONENT, TASK, REFERENCEID,
CONFIRMATION, LANGUAGE, CODEPAGE, AUTHID)> <!-- CNTROLAREA --> <!ELEMENT CNTROLAREA (BSR, SENDER, DATETIME)> <!--- From oagis_segments.dtd -->

After the base DTDs, we have a DTD for a specific document type. Our post journal DTD begins by describing the general structure of this document in a comment. According to the comment, a post_journal document consists of JOURNALs, which in turn, consists of one or more sets of JEHEADER and JELINEs.

<!--- From 001_post_journal_004.dtd --> <!-- Structure Overview POST_JOURNAL (JEHEADER, JELINE+) JEHEADER () JELINE () Notes --> <!-- ==================================================== -->

The following syntax effectively copies the statements in the file named oagis_
domains.dtd:

<!ENTITY % DOMAINS SYSTEM "oagis_domains.dtd"> %DOMAINS; <!ENTITY % FIELDS SYSTEM "oagis_fields.dtd"> %FIELDS; <!ENTITY % SEGMENTS SYSTEM "oagis_segments.dtd"> %SEGMENTS; <!-- ==================================================== -->

Now, the DTD describes the valid content (that is, the elements and attributes) of POST_JOURNAL_004, a sort of container for journals:

<!ELEMENT POST_JOURNAL_004 (CNTROLAREA, DATAAREA+)> <!ATTLIST VERB value CDATA #FIXED "POST"> <!ATTLIST NOUN value CDATA #FIXED "JOURNAL"> <!ATTLIST REVISION value CDATA #FIXED "004">    <!ELEMENT DATAAREA (POST_JOURNAL)>

Next, the DTD describes the valid content (that is, the elements) of POST_JOURNAL (the actual journal information). A POST_JOURNAL consists of a JEHEADER (journal header), and one or more JELINE (journal line) elements:

          <!ELEMENT POST_JOURNAL (JEHEADER, JELINE+)>

This DTD segment describes the valid content (that is, the elements) of JEHEADER (the journal header information). Some of the fields in JEHEADER are optional (as identified by a ?). Elements that are entity names, such as AMOUNT.DOCUMENT.T, are enclosed in parentheses.

                 <!ELEMENT JEHEADER (                  (%AMOUNT.DOCUMENT.T;)?, (%DATETIME.DOCUMENT;)?, (%DATETIME.PAYEND;)?, GLENTITYS, ORIGREF, DESCRIPTN?, DOCTYPE?, JEID?,                  LEDGER?, USERID?, USERAREA?)>

And finally, the DTD describes the valid content (that is, the elements) of JELINE (the journal line information):

                 <!ELEMENT JELINE (                  (%AMOUNT.ACTUAL.T;), (%AMOUNT.ACTUAL.F;)?, GLNOMACCT, BUSNAREA?, COSTCENTER?, DEPARTMENT?, DESCRIPTN?, . . . ((%DATETIME.ACCOUNTING;) | (ACCTPERIOD, ACCTYEAR)), USERAREA?)> <!--- From 001_post_journal_004.dtd -->

A sample XML document based on the DTD we've defined would look like this:*

<?xml version="1.0" standalone="no"?> <!-- $Revision: 6.0.1 $ $Date: 31 October 1998 $ Open Applications Group Sample XML Data Copyright 1998, All Rights Reserved $Name: 001_post_journal_004.xml $ --> <!DOCTYPE POST_JOURNAL_004 SYSTEM "001_post_journal_004.dtd"> <POST_JOURNAL_004> <CNTROLAREA> <BSR> <VERB>POST</VERB> <NOUN>JOURNAL</NOUN> <REVISION>004</REVISION> </BSR> <SENDER> <LOGICALID>XX141HG09</LOGICALID> <COMPONENT>INVENTORY</COMPONENT> <TASK>RECEIPT</TASK> <REFERENCEID>95129945823449</REFERENCEID> <CONFIRMATION>1</CONFIRMATION> <LANGUAGE>EN</LANGUAGE> <CODEPAGE>test</CODEPAGE> <AUTHID>JOE DOE</AUTHID> </SENDER> <DATETIME qualifier = "CREATION" > <YEAR>1999</YEAR> <MONTH>12</MONTH> <DAY>31</DAY> <HOUR>23</HOUR> <MINUTE>59</MINUTE> <SECOND>45</SECOND> <SUBSECOND>0000</SUBSECOND> <TIMEZONE>-0500</TIMEZONE> </DATETIME> </CNTROLAREA> <DATAAREA> <POST_JOURNAL> <JEHEADER> <AMOUNT qualifier = "DOCUMENT" type = "T"> <VALUE>2340500</VALUE> <NUMOFDEC>2</NUMOFDEC> <SIGN>+</SIGN> <CURRENCY>USD</CURRENCY> <DRCR>D</DRCR> </AMOUNT> <DATETIME qualifier = "DOCUMENT" type = "T"> <YEAR>1995</YEAR> <MONTH>12</MONTH> <DAY>31</DAY> <HOUR>23</HOUR> <MINUTE>59</MINUTE> <SECOND>45</SECOND> <SUBSECOND>0000</SUBSECOND> <TIMEZONE>-0500</TIMEZONE> </DATETIME> <DATETIME qualifier = "PAYEND"> <YEAR>1998</YEAR> <MONTH>01</MONTH> <DAY>02</DAY> <HOUR>12</HOUR> <MINUTE>00</MINUTE> <SECOND>00</SECOND> <SUBSECOND>0000</SUBSECOND> <TIMEZONE>-0500</TIMEZONE> </DATETIME> <GLENTITYS>CORPHEADQUARTER</GLENTITYS> <ORIGREF>RCPT#12550699</ORIGREF> <DESCRIPTN>INVENTORY RECEIVED FROM GLOBAL MANUFAC TURING</DESCRIPTN> <USERID>KURTC</USERID> </JEHEADER> <JELINE> <AMOUNT qualifier = "ACTUAL" type = "T" > <VALUE>2340500</VALUE> <NUMOFDEC>2</NUMOFDEC> <SIGN>+</SIGN> <CURRENCY>USD</CURRENCY> <DRCR>D</DRCR> </AMOUNT> <AMOUNT qualifier = "ACTUAL" type = "F" > <VALUE>001001001</VALUE> <NUMOFDEC>2</NUMOFDEC> <SIGN>+</SIGN> <CURRENCY>USD</CURRENCY> <DRCR>D</DRCR> </AMOUNT> <GLNOMACCT>2310</GLNOMACCT> <BUSNAREA>INVENTORY</BUSNAREA> <COSTCENTER>CC123</COSTCENTER> <DEPARTMENT>DEPT001ABC</DEPARTMENT> <DESCRIPTN>INVENTORY</DESCRIPTN> <DATETIME qualifier = "ACCOUNTING" > <YEAR>1996</YEAR> <MONTH>01</MONTH> <DAY>02</DAY> <HOUR>12</HOUR> <MINUTE>09</MINUTE> <SECOND>45</SECOND> <SUBSECOND>0000</SUBSECOND> <TIMEZONE>-0500</TIMEZONE> </DATETIME> </JELINE> <JELINE> <AMOUNT qualifier = "ACTUAL" type = "T" > <VALUE>2340500</VALUE> <NUMOFDEC>2</NUMOFDEC> <SIGN>-</SIGN> <CURRENCY>USD</CURRENCY> <DRCR>C</DRCR> </AMOUNT> <GLNOMACCT>6940</GLNOMACCT> <DESCRIPTN>ACCOUNTS PAYABLE</DESCRIPTN> <ACCTPERIOD>03</ACCTPERIOD> <ACCTYEAR>1999</ACCTYEAR> </JELINE> </POST_JOURNAL> </DATAAREA> </POST_JOURNAL_004>



   



Fundamentals of SVG Programming. Concepts to Source Code
Fundamentals of SVG Programming: Concepts to Source Code (Graphics Series)
ISBN: 1584502983
EAN: 2147483647
Year: 2003
Pages: 362

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net