IPC-2570 & Agile PDX files

Agile Software (years before it was acquired by Oracle) was one of the principal developers of the PDX package definition and a major participant in the IPC-2570 standards committee. Agile's PDX files are likely to be the most commonly-encountered.

Based on examinations of various PDX files, Agile appears to have developed and put into use several non-standard PDX XML definitions. The DTD that was released with Agile 9.0 appears to most closely follow Revision 1.0 of the IPC standard, with only differences in whitespace. Application of the 2571.DTD continues to be slightly non-standard, such as an Agile eXpress 9.0 requirement for inclusion of empty #IMPLIED attributes.

Most variations are minor, though they may affect PDX file viewers and general interoperability in supply chains that use both IPC-compliant PDX files and different versions of Agile. Regrettably, Agile has developed a small following of their own: at least one PDX tool publisher appears to have copied an early Agile DTD rather than use the official 2571.DTD.

These observations are based on examinations of PDX files created by Agile and other vendors, from 2001 through 2012. All dates and versions are only approximate, as the files themselves do not have adequate versioning information (they all claim <?pdx_version 1.0?>). Information has been obtained from PDX packages provided by third parties, and primarily rely upon the <?generated_by ... ?> and ProductDataeXchangePackage thisDocumentGenerationDateTime. This analysis is not complete, and is simply intended to provide assistance to those trying to ensure interoperability between Agile and other implementations of IPC-2570. We would appreciate additions and corrections.

Missing attributes

Until Agile 9.0, the IPC standard's globalCountryCode attribute was missing from two elements:

Incorrect #REQUIRED and #IMPLIED attributes

Several attributes have been changed from #IMPLIED to #REQUIRED or vice versa. The most common example is that the IPC-2571 optional isTopLevel attribute was #REQUIRED in the following elements:

The reverse change occurred in the ManufacturerPart element's mandatory manufacturerPartIdentifier attribute, which Agile assigned as #IMPLIED until Agile OnRamp 8.5 (or perhaps 8.0). Agile 9.0 has reverted to the IPC standard.

Obviously, the easiest implementation solution is to treat the IPC attributes as #REQUIRED which, given the nature of these attributes, should not prove too difficult to enforce in computer systems generating PDX packages.

Obligatory empty attributes

Some elements have #IMPLIED attributes that are nonetheless included in elements. For example, in the ProductDataeXchangePackage element, these empty attributes have been observed

  • packageType=""
  • description=""
  • thisDocumentCopyright=""

Similarly, essentially all #IMPLIED attributes of Contact are included, even when empty.

It appears that these empty attributes serve as placeholders (or a bug work-around) for some versions of Agile eXpress. For instance, if a PDX package is opened in Agile eXpress 9.0 without the Contact's empty attributes, an existing attribute value will be incorrectly replicated into all empty attributes.

These empty inclusions are, however, inconsistently applied (see, for example, Agile's file Attachment attributes, below). At the cost of slightly larger PDX packages, your PDX generator may adopt the view that it's better to include all empty CDATA attributes to ensure Agile can read the file.

Inconsistent capitalization

At various times until Agile 9.0, the attribute capitalization varied from the 2571.DTD:

  • IPC Element: Item
  • IPC Attribute: makeBuyOther
  • Agile attribute: MakeBuyOther

XML tags are case-senstive. Capitalization inconsistencies may cause problems with any XML parsing engine that uses an external 2571.DTD instead of the embedded DTD.

Inconsistent whitespace and end-of-line separators

IPC-2570 uses space characters rather than tabs, and generally is more liberal with whitespace. All of Agile PDX files have been observed to use tabs rather than spaces, though their application is inconsistent between software versions.

The 2571.DTD uses Windows-style EOL values, that is "CRLF". Many Agile PDX packages intermix Windows and Unix ("LF") EOL values. For example, in Agile 9.0, the DTD preamble uses Windows CRLF but the package data uses Unix LF. (Oddly enough, an Agile OnRamp 8.5 PDX file was observed to be the direct opposite.)

Whitespace differences should not be expected to cause problems with commercial XML parsing engines.

File attachments

Due to ambiguities in the attribute definitions of the IPC-2571 Attachment element, there have been different implementations from various suppliers and, in fact, multiple implementations by the same supplier. These ambiguities are principally related to interpretation of the referenceName, universalResourceIdentifier, and fileIdentifier attributes.

Agile eXpress 9.0 (and probably earlier versions) does not recognize the file://filename notation described in IPC-2571, section 8.1 universalResourceIdentifier.

The following samples from various PDX packages include, where possible, both isFileIn=Yes and isFileIn=No variants.

Active Sensing Inc/PDXpert/8.1/24580.537

Refer to PDXpert software's IPC-2570 implementation of a file attachment.

Active Sensing/PDXplorer/2.0/2458

<Attachment referenceName="Atomic Time Clock Datasheet.pdf" universalResourceIdentifier="file://PDX-4bf1bcc21cec.Atomic Time Clock Datasheet.pdf" fileIdentifier="PDX-4bf1bcc21cec" versionIdentifer="" fileSize="61399" checkSum="" isFileIn="Yes" description="" globalMimeTypeQualifierCode="" attachmentModificationDate="2004-05-11T11:15:22" />

<Attachment referenceName="" universalResourceIdentifier="http://www.pdxplorer.com/" fileIdentifier="" versionIdentifer="" fileSize="" checkSum="" isFileIn="No" description="" globalMimeTypeQualifierCode="" attachmentModificationDate="" />

Agile eXpress/ver. 3.0/75029

<Attachment description="[No Description]" universalResourceIdentifier="58472619.AgileWord.doc" fileIdentifier="10175" globalMimeTypeQualifierCode="doc" fileSize="19456" versionIdentifer="0" attachmentModificationDate="2001-07-24T14:38:11Z" isFileIn="Yes"/>

Agile Software/Agile eXpress/ver. 3.0/75034

<Attachment description="L1 Explode" universalResourceIdentifier="L1 Explode 0606 (1).txt" fileIdentifier="39759204" globalMimeTypeQualifierCode="txt" fileSize="729427" versionIdentifer="0" attachmentModificationDate="2003-06-11T10:58:33Z" isFileIn="Yes"/>

<Attachment description="[No Description]" universalResourceIdentifier="Misc Parts.pdf" fileIdentifier="38937720" globalMimeTypeQualifierCode="pdf" fileSize="10458" versionIdentifer="0" attachmentModificationDate="2003-05-09T14:17:46Z" isFileIn="No"/>

Agile Software/Agile OnRamp/version 8.5/120

<Attachment universalResourceIdentifier="Lead-free resistor.msg" fileIdentifier="13365917" description="cust mail" fileSize="30208" attachmentModificationDate="2006-01-11T15:51:53Z" versionIdentifer="0" globalMimeTypeQualifierCode="msg" isFileIn="Yes">

<Attachment universalResourceIdentifier="123_45_assy.zip" fileIdentifier="15754767" description="[No Description]" fileSize="371120" attachmentModificationDate="2006-04-30T11:52:50Z" versionIdentifer="0" globalMimeTypeQualifierCode="zip" isFileIn="No">

Agile Software/Extract/9.2.2.1/11

<Attachment isFileIn="No" universalResourceIdentifier="http://www.molex.com/molex/products/datasheet.jsp?part=active/0022552042_CRIMP_HOUSINGS.xml" fileIdentifier="7833579" versionIdentifer="2" fileSize="0" globalMimeTypeQualifierCode="url" attachmentModificationDate="2011-10-21T19:34:28Z">

<Attachment isFileIn="Yes" universalResourceIdentifier="WY3736.pdf" fileIdentifier="6993921" versionIdentifer="1" fileSize="132885" globalMimeTypeQualifierCode="pdf" attachmentModificationDate="2011-05-15T17:23:46Z">

Agile Software/Extract/9.2.1.3/13

<Attachment description="PRODUCT SPECIFICATION" attachmentModificationDate="2009-07-30T13:14:35Z" globalMimeTypeQualifierCode="pdf" fileSize="64171" versionIdentifer="1" fileIdentifier="236267131" universalResourceIdentifier="PS042213-001F.pdf" isFileIn="Yes">

Arena Solutions/Arena Solutions/ver 1.0/1

<Attachment referenceName="ASSY, BRACKET, WELDED" universalResourceIdentifier="C282021.easm" fileIdentifier="1270294" versionIdentifer="B-03" fileSize="27813" isFileIn="Yes" description="" globalMimeTypeQualifierCode="application/octet-stream" attachmentModificationDate="2007-01-24T09:11:39+05:30" >

DSC Software AG/PLM++ 3.0

<Attachment universalResourceIdentifier="1308899zum000~00.prt" fileIdentifier="1308899" description="NATIVE" fileSize="43725" attachmentModificationDate="" versionIdentifer="" globalMimeTypeQualifierCode="" isFileIn="Yes"/>

OpenVision Software/PDXPro/1.0/1

<Attachment description="avl" universalResourceIdentifier="10804-00.pdf" fileIdentifier="903255" globalMimeTypeQualifierCode="" fileSize="1460486" versionIdentifer="" attachmentModificationDate="" isFileIn="Yes"/>

<Attachment description="chart" universalResourceIdentifier="SB2A-16A-001-991A.pdf" fileIdentifier="1126709" globalMimeTypeQualifierCode="" fileSize="56229" versionIdentifer="" attachmentModificationDate="" isFileIn="No"/>

Oracle/Extract/9.3.1/56

<Attachment isFileIn="Yes" universalResourceIdentifier="CA22451.pdf" fileIdentifier="6263423" versionIdentifer="1" fileSize="37934" description="Cable Assembly" globalMimeTypeQualifierCode="pdf" attachmentModificationDate="2012-08-12T14:11:58Z">

<Attachment  isFileIn="No" universalResourceIdentifier="Cost analysis.xls" fileIdentifier="6283011" versionIdentifer="3" fileSize="28192" description="Reference Document" globalMimeTypeQualifierCode="xlsx" attachmentModificationDate="2012-09-30T19:11:13Z">