IDMS/SQL News  
Vol 10.2   Technical Information for Mainframe and IDMSâ Users    October 2001

 

IDMS Release 15.0 is Available!

According to the information from clients, IDMS Release 15.0 is available. There are more support for Sysplex, more dynamic sysgen features, Table Procedures and the ability to use subquery in the WHERE clause of an UPDATE  (SQL)  statement. More information in the coming days.

IDMS Manuals available in Adobe PDF format

IDMS Manuals are now avilable in PDF format. This is a welcome move. One can say goodbye to the totally unfriendly IBM Bookmanager format! Licensed Clients can download the manuals straight from the Web. Congratulations to the IDMS Developement and Documentation Personnel.

   
Topics of The Week's Summary - Details at 2001-tow02.htm

Code Red Attacks Servers and Routers!

There has been some confusion about the destructive power of Code Red. First it was said that only MS IIS is affected. Now we have solid proof that even Routers have been affected. An open hole is created in the routers through which other viruses can get in!

Dot.com venture Arzoo collapses! - Summer 2001

Sabeer Bhatia, did the graveside honors by announcing the closure of his dream project Arzoo.com. He sparked off a gold rush in dotcom industry when Microsoft's Bill Gates shelled out $400 million for his Hotmail free e-mail service.

Hewlett-Packard acquires Compaq! - Aug 2001

HP will acquire Compaq for $25 billion. The combined revenue will be about $87 billion making it on the same level as IBM! IDMS/SQL welcomes the acquisition of the third class company.

Where is the Java Magic? Sun Micro posts loss, sales drop 43% - October 2001

SAN FRANCISCO: Network computer maker Sun Microsystems reported on Thursday its second quarterly loss in a row after a string of profits since 1989, a fall from grace the company said was accelerated by effects of the September 11 attacks on a slow economy.

New York Tragedy - Could have been avoided?

- September 2001

While everyone is trying to come to terms with the New York Tragedy, many IDMS Programmers are wondering: Could a surveillance system, based on a proper database, have foreseen and avoided the tragedy?

No Breakup of Microsoft! - Sept 2001

The U.S. Justice Department said Thursday it would not seek to break Microsoft in two during the next phase of the software maker's landmark antitrust case.

Topics of the Week (April-Aug 2001)

Optimization of Index and OLQ !

If you have system-owned indexed set and wants to optimise the access based on key values, it is possible but there are some pitfalls. Take for example EMPLOYEE record with EMP-NAME-NDX. The index is on EMP-LAST-NAME and EMP-FIRST-NAME (suffix –0415 omitted).

GET ALL EMPLOYEE IN EMP-NAME-NDX 
WHERE EMP-LAST-NAME-0415 = 'FINN' AND 
EMP-FIRST-NAME-0415 = 'PHINEAS'                                        
                                                                       
OLQ 098006 00  1 whole lines and 0 partial lines in report.            
OLQ 098007 00  57 records read.   1 records selected.                  

Basically, OLQ sweeped the whole index and read all the records before selcting one. 

But look at the following 
GET ALL EMPLOYEE IN EMP-NAME-NDX WHERE SORTKEY=('FINN','PHINEAS')        
                                                                         
OLQ 098006 00  1 whole lines and 0 partial lines in report.              
OLQ 098007 00  1 records read.   1 records selected.   

You get the same result based on the key! Index is not sweeped. Not all record are read. Just one is read! EMPLOYEE database you may not see the big difference because it is so small. If it is large with 100.000 records or more, the difference in times will be substantial. The first query in that case would have taken minutes (5-10 minutes) depending upon the size and spread of pages, whereas the second one would have taken 1-2 seconds! One important factor to note is that SQL (IDMS/SQL) Optimizer would have  optimized even the first usage. But OLQ does not.

OLQ Menu Mode may or may not use index depending upon whether you give a valueagainst the index field. We failed to use index in the case of EMPLOYEE in the following menu mode example.


_ EMPLOYEE
s 02 EMP-ID-0415 *
_ 02 EMP-NAME-0415
x 03 EMP-FIRST-NAME-0415 *
x 03 EMP-LAST-NAME-0415 * > 'a'
x 02 EMP-ADDRESS-0415
s 03 EMP-STREET-0415
_ 03 EMP-CITY-0415
_ 03 EMP-STATE-0415

HELP PATH GAVE the sql command and


RETRIEVAL PATH GENERATED
-----------------------------------------
GET ALL SEQUENTIAL EMPLOYEE

Seems OLQ fail to recognize the index on EMP-LAST-NAME-0415!

We tried the same thing with SKILL Record, trying s dummy selection criteria on skill-name-0455

Columns Currently Selected: 0 Selection Criteria
_ SKILL
s 02 SKILL-ID-0455 *
s 02 SKILL-NAME-0455 * > ' '
s 02 SKILL-DESCRIPTION-0455
HELP PATH

SQL COMMAND GENERATED
-----------------------------------------
SELECT 'SKILL'.* FROM 'SKILL' WHERE ('SKILL'.'SKILL-NAME-0455' > ' ')

RETRIEVAL PATH GENERATED
-----------------------------------------
GET ALL SKILL USING INDEX SKILL-NAME-NDX WHERE SKILL.SKILL-NAME-0455 > ' '

This time it used INDEX Sweep instead of Area Sweep. Unlike the EMPLOYEE record here the index is on a single field.



Mapless Dialog and Error Messages

A user dialog has abended and here we have a message from OLP (IDMS System Log)

IDMS DC177036 V3 ** SYSTEM FAILED - P123A100-PM IDMSSTAT: 0326
IDMS DC174018 V3 CA-ADS ABEND. DISPLAY COMMAND FOUND IN MAPLESS DIALOG

Background:

Mapless dialogs are used as subroutines in many ADS applications. With
database access in place, very often these dialogs have DISPLAY statements
to catch unuxpected errors. But with no map, the dialog abends, the message
appears in the IDMS Log.

How can we solve this:

1. Have a map attached to the mapless dialog, though it will not be used normally.
Premap process has a RETURN, back to the calling dialog.
The repsonse process is not there, or is a simple RETURN. This way unexpected
errors come out on the screen avoiding an abend. This way the 'mapless' dialog
can use 'DISPLAY TEXT' statements for error messages.


2. The other method is to avoid using DISPLAY TEXT statements. Here the errors
should be snapped to teh LOG using SNAP statements.

It looks like

IF DB-ANY-ERROR
DO.
MOVE ERROR-STATUS TO WS-ERROR-STATUS.
MOVE 'XYZ MESSAGE' TO WS-MESSAGE-AREA.

SNAP RECORD (WS-ERROR-MESSAGE) TITLE 'DIALOG D123 SNAP RECORD XYZ'.

RETURN.
END.



Back to Basics:

How to Add  a Record in IDD!

Now that many sites do not have a well-designed curriculum for IDMS education, many new comers are learning things from the 'old hands'. This is alright if the 'old hands' know IDMS and not alright when the 'old hands' are handling the product as something 'old' and 'to be replaced soon'.

First thing to remember is to use IDD Command Mode. There is one menu mode called IDDM. We do not recommend using that. If you know a few simple commands like 'DISPLAY and ADD', you can do many things in IDD command mode far more easily than than IDDM.

One can add a record using the COBOL like syntax

ADD REC OFFICE.
02 OFFICE-ID PIC 9(4).
02 OFFICE-NAME PIC X(20).

This works, but is not recommended unless you know what you are doing. This will create record. And it will also create element definitions if they do not already exist in IDD. If you delete record OFFICE at this stage, element definitions are not deleted.

If the element name already exists it will be used. If the name exists and the PICTURE does not match, IDD will automatically create a new definition with the element name VERSION 2 or next higher value. So if you domat this stage,

DEL REC OFFICE.
ADD REC OFFICE.
02 OFFICE-ID PIC X(4).
02 OFFICE-NAME PIC X(20).

Then an element OFFICE-ID VERSION 2 will be created to accomodate PIC X(4). A display in IDD will verify this.

DIS REC OFFICE.
*+ ADD
*+ RECORD NAME IS OFFICE VERSION IS 1
*+ DATE CREATED IS 08/13/01
*+ TIME LAST UPDATED IS 12393870
*+ RECORD LENGTH IS 29
*+ PUBLIC ACCESS IS ALLOWED FOR ALL
*+ RECORD NAME SYNONYM IS OFFICE VERSION 1
*+ .
*+ RECORD ELEMENT IS OFFICE-ID VERSION 2
*+ LINE IS 000100
*+ LEVEL NUMBER IS 02
*+ PICTURE IS 9(9)
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 9
*+ POSITION IS 1
*+ .
*+ RECORD ELEMENT IS OFFICE-NAME VERSION 1
*+ LINE IS 000200
*+ LEVEL NUMBER IS 02
*+ PICTURE IS X(20)
*+ USAGE IS DISPLAY

The RIGHT way to add a RECORD in IDD !

Having seen a little bit of COBOL like record addition, we have to introduce the right way of creating records.

The way to go is

- create element defintions

- create group elements if any using SUB ELEMENTS clause

- create Records

So one would  follow the sequence

ADD ELE OFFICE-ID PIC X(4).

ADD ELE OFFICE-NAME PIC X(20).

ADD  ELE DAG   PIC 99.

ADD ELE MONTH  PIC 99.

ADD ELE YEAR PIC 9(4).

ADD ELE DATO-1 SUB ELEMENTS ARE (YEAR, MONTH, DAG).

ADD REC OFFICE.

REC ELE OFFICE-ID.

REC ELE OFFICE-NAME.

In case an element already exists in dictionary you get an error message.

ADD ELE DATO-1 SUB ELEMENTS ARE (YEAR, MONTH, DAG).
*+ E DC601013 ELEMENT DATO-1 VERSION 1 IS ALREADY IN DICTIONARY WORD 3
*+ W DC601017 FORWARD SPACING TO NEXT PERIOD WORD 3

Either you can use the existing version or you can create a new version or change to a new name.

We modify the record definition to include the date-1 field.

MOD REC OFFICE.

REC ELE DATO-1.

One can later verify the definition by displaying the record.

DIS REC OFFICE or still better in COBOL format as

DIS REC OFFICE WITH RECEL    or DISPLAY RECORD OFFICE WITH COBOL AS SYN.
*+ ADD
*+ RECORD NAME IS OFFICE VERSION IS 1
*+ .
*+ 02 OFFICE-ID
*+ PICTURE IS X(4)
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 4
*+ POSITION IS 1
*+ .
*+ 02 OFFICE-NAME
*+ PICTURE IS X(20)
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 20
*+ POSITION IS 5
*+ .
*+ 02 DATO-1
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 8
*+ POSITION IS 25
*+ .
*+ 03 DAGENS-AAR
*+ PICTURE IS 9(4)
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 4
*+ POSITION IS 25
*+ .
*+ 03 DAGENS-MND
*+ PICTURE IS 9(2)
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 2
*+ POSITION IS 29
*+ .
*+ 03 DAGENS-DAG
*+ PICTURE IS 9(2)
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 2
*+ POSITION IS 31
*+ .

Note that we chose to use the existing definition of element DATO-1.

Overriding the basic PICTURE of an element

Here we saw that when you include an element in a record, the PICTURE is copied. But if we want to use another PICTURE, IDD creates a new version of the same element. The question is : Is it possible to avoid having this extra element definition ?

Yes, you can copy an element into a RECORD and use a PIC which is different from that of the base element.

To start with let's assume that there exists an element   called OFFICE-ID already in IDD

*+ ADD
*+ ELEMENT NAME IS OFFICE-ID VERSION IS 1
*+ DATE CREATED IS 08/13/01
*+ PUBLIC ACCESS IS ALLOWED FOR ALL
*+ PRIMARY
*+ PICTURE IS 9
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 1

Now add the record.

ADD REC OFFICE.
REC ELE OFFICE-ID PIC 9(4).   <--- Note the extra

The record is added with OFFICE-ID as PIC 9(4) though the element in IDD will still say PIC 9.

DIS REC OFFICE.
*+ ADD
*+ RECORD NAME IS OFFICE VERSION IS 1
*+ DATE CREATED IS 08/13/01
*+ TIME LAST UPDATED IS 13063168
*+ RECORD LENGTH IS 4
*+ PUBLIC ACCESS IS ALLOWED FOR ALL
*+ RECORD NAME SYNONYM IS OFFICE VERSION 1
*+ .
*+ RECORD ELEMENT IS OFFICE-ID VERSION 1
*+ LINE IS 000100
*+ LEVEL NUMBER IS 02
*+ PICTURE IS 9(4)
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 4
*+ POSITION IS 1
*+ . 
DIS ELE OFFICE-ID
*+ ADD
*+ ELEMENT NAME IS OFFICE-ID VERSION IS
*+ DATE CREATED IS 08/13/01
*+ PUBLIC ACCESS IS ALLOWED FOR ALL
*+ PRIMARY
*+ PICTURE IS 9
*+ USAGE IS DISPLAY
*+ ELEMENT LENGTH IS 1
*+ WITHIN RECORD OFFICE VERSION 1



The difference is OLTP!

We have repeatedly pointed out in these columns the inherent differences between a true  OLTP  system and a system which mimics an OLTP environment. Many web-based applications with Java (class, servlet, JSP, Beans, EJB) appears to behave like an OLTP environment. But many of them are far away from real OLTP. With a plethora of real code running behind the Web and Webservers and asynchronous applications like MQSeries interfacing in between and with the usage of replicated (=duplicated) databases, it is not possible to give true OLTP. It's a simple truth Java Programmers either forget or not aware of, even now!

So many occasions you see messages like  (reminding you the shortcomings of such solutions!)

Since this is your first time visit to eSupport,
please allow 15 minutes for the system to update your profile


Return to eSupport Homepage
OR Even Worse an abend like:

Update is proceeding, please wait...

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

/xyz-web/admin/RegInfo.asp, line 85

 

An Introduction to Interactive Processing!

Well, many of us old-timers learned   programming using the IBM 360 and older machines. The author had been fortunate enough to have an IBM S/370-155 at the University, running OS/VS1. In the early 70s this was a 'formiddable' machine! The first one to support Virtual Storage upto 16M, DAT (dynamic address translation), true multi-programming etc. The leap from S/360 to S/370 was enormous. OS/VS1 even supported IDMS (Batch then).

Even with S/370 machine, we had to use punched cards! Students waited in queue to get their reserved slots at the punching machines. Submit a small FORTRAN program to WATFIV compiler (the speedy way of compiling FORTRAN using the University of Waterloo Compiler) and wait half-a-day only to get a synatx error message on a piece of paper. Those who were 'advanced' tried to submit a PL/1 program. With PL/1, FORTRAN, LIST, PASCAL and SNOBOL available on the machine, no one liked COBOL and no one tried COBOL!

So with S/370 in 1974 it was all batch. Then there appeared  an HP machine (the size of a type writer) with a paper console, where you could try some interactive programming with BASIC. We tried some simple mastermind (guessing a number). BASIC was a great language. Simple and interactive!  So the following BASIC program which we probably tried in 1974 is still valid on a GW-BASIC interpreter on a PC-DOS. [Incidentally GW stands for none other than Gates, William!]

10 PRINT "Type a Number="
20 INPUT  I1
30 IF I1=0 GOTO 70
40 PRINT "Square of ", I1 , " is " I1*I1
50 PRINT "Type next number="
60 GOTO 20
70 END

Type next number= ?
2525 Square of 2525 is 6375625
Type next number= ? 5555555555555555555555588
Square of 5.555556E+24 is Overflow
1.701412E+38 <---- seems to be the limit on the PC
Type next number=

No punched cards on HP. The input and reply was getting printed on the paper console. Very primitive. But it was an interactive online program! It communicated with the user. It assumed 0 or no input as the sign to end the process. [One of my friends here just tells me that he ran this on an NT machine  in DOS mode with a GW-BASIC just downloaded from the net; so it works even today! ]

CICS, IDMS-DC, Unix, Client-Server, Web, Java

Since then we have come a long way. IBM went online with CICS in the eraly eighties. VM/370 appeared on the scene with tremendous interactive power for the developers, at the same time running either OS/VS1 or DOS/VSE under VM. IDMS-DC made its debut around 1983. Then there was of course, PDP/11 and VAX-11 machines from DEC, already out in the market. Unix and Client-Server captured the scene in the 90s.  Web and Java completed the cycle in the late 90s. But online (interactive) programming has not changed at all! Basically the principle is the same: the programs prompts the user (text, map, form...) and the user replies, the program reads and responds again. There is no magic! User interface has changed, not the principle behind it (except in sales presentations and executive briefs!).

CICS - Customer Information Control System

CICS was one of the first systems to support online on 370. Typical CICS program was written in COBOL or PL/1. Databases from IBM were DL/1 or VSAM Files typically on DOS/VSE. CICS also supported IDMS-DB. A typicall CICS program starts by sending a map.

EXEC CICS SEND MAP ('D123MAP1') MAPSET('D123MAP')
END-EXEC

EXEC CICS RETURN
END-EXEC

This is the start of a pseudo converse. Once the user enters something on the map and press ENTER (or any other PF key) the program (in fact the TASK) is activated again. The interesting code in the program in this case will be

EXEC CICS RECEIVE MAP ('D123MAP1') MAPSET('D123MAP')
END-EXEC

Then there is checking for the key by testing CICS variables DFHENTER, DFHPF1 .. etc.

Database access takes place and the values are moved to the map and redisplayed to the user again. The process continues...

In the simplest case a single program can be associated with a MAP and Task code. On the other hand real online systems involve many programs and maps. A program can call more than one map and even give control to other programs on the way or even start other TASKs related or unrelated to the current application.

The bottom line is that you have a map (=Form) and some program code to manipulate the map fields and interact with the user.

IDMSDC and ADS/OnLine

IDMS/DC supported COBOL/DC and PL/1-DC programs just the same way as CICS.

The interaction with the screen was achieved by MAPIN and MAPOUT commands.

ADS/Online was a major step forward in the deveopment of 3270 based online systems. Unlike CICS/COBOL one was able to develop online applications without resorting to JCL and TSO jobs.

IDD/ADSO was a good combination which resulted in very many online applications in production in the 80s and early 90s. Many of these are still alive and running very well. The only reason clients want to migrate is that they want graphical front-ends from PC and WWW.

Hello World in Java /html

public class HelloWorld2 extends Applet
{
// we must use Graphics method for Windows
public void paint(Graphics g)
{
g.drawString("Hello World! from HelloWorld2", 20, 20);
} // end of method main
} // end of class
<HTML>
<!- HelloWorld.html ->
<!- Test Java applet ->
<HEAD>
<TITLE>Welcome to Java</TITLE>
</HEAD>
<BODY>
<h3> A Simple Class Example</h3>
<APPLET CODE="HelloWorld2.class" WIDTH="300" HEIGHT="100">
This Web page requires a <B>Java</B>-enabled Web Browser.
</APPLET>
</BODY>
</HTML>
The output on the Web will be

The above in a simple Java. In a real case there will be input and output to be processed by the server side Java Code. Basically the methodology of online processing has not changed very much from the days of the BASIC programming! Instead of interactive line by line I/O now we have forms and program code to process those forms. The program code is wrapped in html, Javascript, php, cgi code or/and java classes and beans and all sorts of new buzzwords!

 

0302 Error Code Revisited

0302 FIND/OBTAIN DBKEY

The db-key specified is inconsistent with the area in which the specified record is stored. Probable causes forthe return of this status code are:

° The db-key has not been initialized properly.

° The record name is incorrect.

° The program has invoked the wrong subschema. If the FIND/OBTAIN DBKEY does not specify a record name, the return of this status code means that the db-key specified is not within the range of the DMCL tables.

This error can be easily simulated by the following code (= case 1 above)

MOVE 1234 TO DB-KEY1.
OBTAIN DEPARTMENT DB-KEY IS DB-KEY1.
IF DB-ANY-ERROR ....

Dialog will abend with the message

IDMS DC173008 V7 APPLICATION ABORTED. BAD IDMS STATUS RETURNED; STATUS=0302

 

"browser friendly"

It was "user-friendly" until now (also for a long time)! Not anymore. Today browser and WWW decide everything. So you see new terms like "Click on this "browser friendly" sized image for full-size original: 894KB". On the other hand, several 'broser-friendly'pages mot printer-friendly. Nice looking page appears chopped off on the right when printed. On the other hand if you don't to waste paper and prefer to save the page locally, all you get is the frame-names, in case the page is built using frames!!


Third Class Software Rule the World!

That's right. The following message came from Word when I tried to cut and paste an unprintable page from the browser. All other windows were working alright. In fact, I was able to start a PaintShop Pro and capture this image after I got the error. But the Word just won't allow the 'paste'!

 


Java Magic - but Heavy!

When Sun Microsystems introduced Java as a programming language, it was marketed as something 'born for the web' and easier than C++. This is true. The language itself is simple and syntax rules are straightforward and simple indeeed. So anyone using Sun's free JDK Workbench (character based tool under DOS prompt) could write a few standalone Java programs or Web based applets. But soon it became obvious that Java's real power comes form programming using 'classes' (object orinted approach) rather than starightforward procedure oriented approach. Graphical Tools appeared in the market. Simple Java was not enough. Buzzwords like AWT, Swing and Beans appared.

Recently Sun acquired NetBeans IDE and Forte Tools and comibined the two to launch Forte for Java. In short Sun's own develpment now supports graphical tools for Java and is ready to compete against Visual Age, Visual Studio etc etc.

 

 

While installing Forte Community Edition (free) I got a message that one must have JDK1.3.1. So I installed JDK1.3.1 and tried Forte again. But still the old warning comes. Forte Install program does not accept that I have JDK1.3.1!! What is the basis? It seems Forte is simply looking at the directory name for JDK - if it doesn't match Sun's default (JDK131 or so) it assumes you do not have JDK1.3.1!!

This simple error, though ignored by many, is not simple at all. It gives you an idea of the philosophy and approach taken by Java programs and programmers. A serious decision has been taken based on what appears to be a misleading premise. This reminds me of one I know who missed an international flight at an airport, because asa regular traveler on this flight, he was expecting this flight to take off from a particular terminal. He waited and monitored the terminal from the nearby bar, while the plane took off from another terminal!

Buzzwords you should know!

If you think your 20+ experience in developing and implementing production applications on IBM mainframe will guarantee you a job, you are in for a big surprise. A person with 6 months experience on Java (that too from a Sam's Learn in 21 days Book!) will carry more weight than you in any company anywhere in the world, unless you too pick up some of the modern buzzwords. We had already talked about Java and XML. There is one more important one now - UML which stands for Unified Modeling Language.

UML - Unified Modeling Language

The books says "The Unified Modeling Language (UML) provides system architects working on object analysis and design with one consistent language for specifying, visualizing, constructing, and documenting the artifacts of software systems, as well as for business modeling.... UML is the proper successor to the object modeling languages of three previouslyleading object-oriented methods (Booch, OMT, and OOSE). The UML is the union of these modeling languages and more, since it includes additional expressiveness to handle modelingproblems that these methods did not fully address. "

Basically it is modeling language for Object Oriented Design and Programming. Since Object Oriented Enthusiasts claim that everything in real life can be represented as objects, it goes without saying that UML can then represent every phenomena under the Sun. This is not so (surprisngly): UML does not support data-flow diagrams! Reason ? The Manual says: "Simply put, data-flow and other diagram types that were not included in the UML do not fit as cleanly into a consistent object-oriented paradigm. Activity diagrams and collaboration diagrams accomplish much of what people want from DFDs. "

This is a contradictory statement. It is more like cutting your feet to fit the shoe instead of finding a proper shoe.

Here is a sample (and simplest) diagram from UML.

This notation is exactly opposite of what we have seen in E-R Modeling and even our own Bachman Diagram. An upside down representation gives an idea of shape of things to come in UML.

The original article appeared in IDMS/SQL Issue 10.1

http://www.reocities.com/idmssql/idms101.htm

Misuse of Words - A sequel

IDMS/SQL News 10.1 carried a dispatch on "Misuse of Acronyms". There it was (rightly) mentioned that XML stands for Extensible Markup Language. But look at what IBM Manual on Visual Age says : Creating test cases for Extended Markup Language (XML) applications by hand from Document Type Descriptions (DTDs) can be tedious. [Visual Age for Java 4.0 Getting Started]. Extensible has become Extended!! Document Type Definition has been erroneously called Document Type Description!

The books on Java and new technologies contains hundreds of such 'newly' invented acronyms loosely used to denote whatever the author had in his mind!

This issue located at http://www.reocities.com/idmssql/idms102.htm

IDMS/SQL is published quarterly on behalf of IDMS WatchDog Group, Scandinavia, Oslo-Helsinki-Hørsholm for free circulation among IDMS Users Worldwide. IDMS/SQL News is not a CA publication. CA-IDMS/DB, CA-IDMS/DC and CA-ADS are registered trademarks of Computer Associates International Inc. CICS, IMS- DB/DC, VSAM and DB2 are registered trademarks of International Business Machines Corporation. Technical examples are only guidelines and modifications might be required in certain situations and operating systems. Opinion expressed are those of the authors and do not represent the views of IDMS clients or related vendors. Permission is hereby granted to use or reproduce the information , only to IDMS Customers and Consultants, provided the material is distributed free of charge.