XJDF and JDF Side by Side
This is an annotated simple annotated ConventionalPrinting job to illustrate the differences and similarities of JDF and XJDF.
The XJDF was created automatically using the CIP4 JDF editor, which in turn uses utility classes which are available in the CIP4 open source Java Library - see: JDFLibJ.
- Rainer Prosi add Product definition to this example
XJDF
JDF
Remarks
XJDF Header
<?xml version="1.0" encoding="UTF-8"?> <XJDF Category="MISCPS.Printing" CommentURL="http://www.example.com" DescriptiveName="MISCPS Golden Ticket Example Job - version: CIP4 JDF Writer Java 1.5 BLD 81" ID="n_000001" JobID="Job_000010" JobPartID="n_000001" MaxVersion="2.0" Types="InkZoneCalculation ConventionalPrinting" Version="2.0" xmlns="http://www.CIP4.org/JDFSchema_2_0"> <AuditPool> <AuditCreated> <Header AgentName="CIP4 JDFEditor" AgentVersion="Build version CIP4 JDF Writer Java 1.5 BLD 81" ID="a_001024" TimeStamp="2014-11-20T12:04:15+08:00"/> </AuditCreated> <AuditResource> <ResourceSet Name="Media" Usage="Input"> <Resource DescriptiveName="the paper to print on" ProductID="paperID"> <AmountPool> <PartAmount Amount="1005" Waste="88"> <Part SheetName="Sheet1"/> </PartAmount> </AmountPool> </Resource> </ResourceSet> </AuditPool>
JDF Header
<?xml version="1.0" encoding="UTF-8"?> <JDF Category="MISCPS.Printing" CommentURL="http://www.example.com" DescriptiveName="MISCPS Golden Ticket Example Job - version: CIP4 JDF Writer Java 1.5 BLD 81" ID="n_000001" JobID="Job_000010" JobPartID="n_000001" MaxVersion="1.5" Status="Waiting" Type="ProcessGroup" Types="InkZoneCalculation ConventionalPrinting" Version="1.5" xmlns="http://www.CIP4.org/JDFSchema_1_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ProcessGroup"> <AuditPool> <Created AgentName="CIP4 JDFEditor" AgentVersion="Build version CIP4 JDF Writer Java 1.5 BLD 81" ID="a_000002" TimeStamp="2014-11-20T12:03:45+08:00"/> </AuditPool> <ResourcePool> ... <ResourceLinkPool> ...
The root tag, version information and schema are obviously different.
Whereas JDF allows for multiple JDF nodes, XJDF requires exactly one.
Audits have remained mostly unchanged.
ResourceLinkPool and ResourcePool have been removed. The ResourceSet elements reside directly in the only XJDF.
ColorantControl
<ResourceSet ID="r_000003" Name="ColorantControl" Usage="Input"> <Resource ID="r_000003.1" Status="Available"> <ColorantControl ColorRef="r_000004" ColorantOrder="Black Cyan Magenta Yellow Spot1" ProcessColorModel="DeviceCMYK"/> </Resource> </ResourceSet>
ColorantControl
<ColorantControl class="Parameter" ID="r_000003" ProcessColorModel="DeviceCMYK" Status="Available"> <ColorPoolRef rRef="r_000004"/> <ColorantOrder> <SeparationSpec Name="Black"/> <SeparationSpec Name="Cyan"/> <SeparationSpec Name="Magenta"/> <SeparationSpec Name="Yellow"/> <SeparationSpec Name="My Color"/> </ColorantOrder> </ColorantControl> ... <ColorantControlLink Usage="Input" rRef="r_000003"/>
ColorantControlLink and ColorantControl have been merged into one ResourceSet.
Separations are referred to by attribute lists rather than SepaationSpec elements.
Color
<ResourceSet ID="r_000004" Name="Color"> <Resource ID="r_000004.1" > <Part Separation="Black"/> <Color ActualColorName="Black" CMYK="0 0 0 1"/> </Resource> <Resource ID="r_000004.2" > <Part Separation="Cyan"/> <Color ActualColorName="Cyan" CMYK="1 0 0 0"/> </Resource> <Resource ID="r_000004.3" > <Part Separation="Magenta"/> <Color ActualColorName="Magenta" CMYK="0 1 0 0"/> </Resource> <Resource ID="r_000004.4" > <Part Separation="Yellow"/> <Color ActualColorName="Yellow" CMYK="0 0 1 0"/> </Resource> <Resource ID="r_000004.5" > <Part Separation="Spot1"/> <Color ActualColorName="My Color" CMYK="0.4 0.4 0 0"/> </Resource> </ResourceSet>
ColorPool
<ColorPool class="Parameter" ID="r_000004" Status="Unavailable"> <Color CMYK="0 0 0 1" class="Parameter" Name="Black"/> <Color CMYK="1 0 0 0" class="Parameter" Name="Cyan"/> <Color CMYK="0 1 0 0" class="Parameter" Name="Magenta"/> <Color CMYK="0 0 1 0" class="Parameter" Name="Yellow"/> </ColorPool>
ColorPool is a "standard" partitioned Color ResourceSet rather than a specific animal.
The name is a token that SHOULD be matched to an ActualColorName that is a string may contain blanks and other special characters.
This allows separations to be referenced as NMTOKENS lists rather than requiring expilcit SeparationSpec elements.
ConventionalPrintingParams
<ResourceSet ID="r_000005" Name="ConventionalPrintingParams" Usage="Input"> <Resource ID="r_000005.1" Status="Available"> <ConventionalPrintingParams PrintingType="SheetFed" WorkStyle="Simplex"/> </Resource> </ResourceSet>
ConventionalPrintingParams + Link
<ConventionalPrintingParams class="Parameter" ID="r_000005" PrintingType="SheetFed" Status="Available" WorkStyle="Simplex"/> ... <ConventionalPrintingParamsLink Usage="Input" rRef="r_000005"/>
In JDF, a resource is only applicable to the JDF that contains a matching ResourceLink. In XJDF the two concepts have been combined into a "Set" entry that is always applicable. Thus you need no longer search for the matching resource to a ResourceLink.
Generic attributes such as Usage are defined in explicit elements which are the parent elements of the specific resources such as ConventionalPrintingParams.
Thus each table in the specification is self contained and does not require an implementor to follow the tree of inheritence in the specification.
Partitioned NodeInfo ParameterSet
<ResourceSet ID="r_000011" Name="NodeInfo" Usage="Input"> <Resource DescriptiveName="Printing forJDFAttributeMap: {(SheetName = Sheet1) (SignatureName = Sig1) " ID="r_000011.1" Status="Available"> <Part SheetName="Sheet1"/> <NodeInfo NodeStatus="Waiting"/> </Resource> </ResourceSet>
Partitioned NodeInfo
<NodeInfo class="Parameter" ID="r_000011" NodeStatus="Waiting" PartIDKeys="SignatureName SheetName Side Separation" PartUsage="Implicit" Status="Available"> <Employee class="Implementation" PersonalID="personalID1" Roles="CSR"/> <NodeInfo SignatureName="Sig1"> <NodeInfo DescriptiveName="Printing for Sheet1 " NodeStatus="Waiting" SheetName="Sheet1"/> </NodeInfo> </NodeInfo> ... <NodeInfoLink Usage="Input" rRef="r_000011"/>
Partitioning always is written as a linear list with Part elements rather than a hierarchical structure.
The SignatureName partition key has been removed.
CustomerInfo
<ResourceSet ID="r_000012" Name="CustomerInfo" Usage="Input"> <Resource ID="r_000012.1" Status="Available"> <CustomerInfo ContactRef="r_000013.1" CustomerID="customerID" CustomerJobName="customer job name" CustomerOrderID="customerOrder_1"/> </Resource> </ResourceSet>
CustomerInfo
<CustomerInfo class="Parameter" CustomerID="customerID" CustomerJobName="customer job name" CustomerOrderID="customerOrder_1" ID="r_000012" PartUsage="Implicit" Status="Available"> <ContactRef rRef="r_000013"/> </CustomerInfo> ... <CustomerInfoLink CombinedProcessIndex="0 1" Usage="Input" rRef="r_000012"/>
References, if used at all, are simple ID-IDRef pairs rather than
<ContactRef rRef="r_000013"/>
that may even contain additional partitioning data, requiring specific lookup functions.
Contact
<ResourceSet ID="r_000013" Name="Contact"> <Resource ID="r_000013.1" Status="Available"> <Part ContactType="Customer"/> <Part ContactType="Administrator"/> <Contact> <Person FamilyName="Töpfer" FirstName="Harald"/> <ComChannel ChannelType="Phone" Locator="tel:+666.42.123456"/> <ComChannel ChannelType="Fax" Locator="tel:+666.42.123455"/> <ComChannel ChannelType="Email" Locator="mailto:harald.topfer@thepits.net"/> <Company OrganizationName="The Pits"/> </Contact> </Resource> <Resource ID="r_000013.1" Status="Available"> <Part ContactType="Employee"/> <Contact ContactTypeDetails="CSR"/> </Resource> </ResourceSet>
Contact
<Contact class="Parameter" ContactTypes="Customer Administrator" ID="r_000013" Status="Available"> <Person class="Parameter" FamilyName="Töpfer" FirstName="Harald"/> <ComChannel ChannelType="Phone" class="Parameter" Locator="tel:+666.42.123456"/> <ComChannel ChannelType="Fax" class="Parameter" Locator="tel:+666.42.123455"/> <ComChannel ChannelType="Email" class="Parameter" Locator="mailto:harald.topfer@thepits.net"/> <Company class="Parameter" OrganizationName="The Pits"/> </Contact>
Preview
<ResourceSet ID="r_000014" Name="Preview" Usage="Input"> <Resource ID="r_000014.1"> <Part Separation="Black" SheetName="Sheet1" Side="Front"/> <Preview PreviewFileType="PNG" PreviewUsage="Separation"/> </Resource> <Resource ID="r_000014.2"> <Part Separation="Cyan" SheetName="Sheet1" Side="Front"/> <Preview PreviewFileType="PNG" PreviewUsage="Separation"/> </Resource> <Resource ID="r_000014.3"> <Part Separation="Magenta" SheetName="Sheet1" Side="Front" /> <Preview PreviewFileType="PNG" PreviewUsage="Separation"/> </Resource> <Resource ID="r_000014.4"> <Part Separation="Yellow" SheetName="Sheet1" Side="Front"/> <Preview PreviewFileType="PNG" PreviewUsage="Separation"/> </Resource> <Resource ID="r_000014.5"> <Part Separation="Black" SheetName="Sheet1" Side="Back"/> <Preview PreviewFileType="PNG" PreviewUsage="Separation"/> </Resource> <Resource ID="r_000014.6"> <Part Separation="Cyan" SheetName="Sheet1" Side="Back"/> <Preview PreviewFileType="PNG" PreviewUsage="Separation"/> </Resource> <Resource ID="r_000014.7"> <Part Separation="Magenta" SheetName="Sheet1" Side="Back"/> <Preview PreviewFileType="PNG" PreviewUsage="Separation"/> </Resource> <Resource ID="r_000014.8"> <Part Separation="Yellow" SheetName="Sheet1" Side="Back"/> <Preview PreviewFileType="PNG" PreviewUsage="Separation"/> </Resource> </ResourceSet>
Preview
<Preview class="Parameter" ID="r_000014" PartIDKeys="SignatureName SheetName Side Separation" PartUsage="Explicit" PreviewFileType="PNG" PreviewUsage="Separation"> <Preview SignatureName="Sig1"> <Preview SheetName="Sheet1"> <Preview Side="Front"> <Preview Separation="Black"/> <Preview Separation="Cyan"/> <Preview Separation="Magenta"/> <Preview Separation="Yellow"/> </Preview> <Preview Side="Back"> <Preview Separation="Black"/> <Preview Separation="Cyan"/> <Preview Separation="Magenta"/> <Preview Separation="Yellow"/> </Preview> </Preview> </Preview> </Preview> ... <PreviewLink CombinedProcessIndex="0 1" Usage="Input" rRef="r_000014"/>
Paper Media excluding consumption reporting
<ResourceSet ID="r_000006" Name="Media" Usage="Input"> <Resource DescriptiveName="the paper to print on" ID="r_000006.1" ProductID="paperID" Status="Unavailable"> <Media Dimension="2891.33858268 1984.2519685" MediaType="Paper" Thickness="112.5" Weight="90"/> <AmountPool> <PartAmount Amount="1000" MaxAmount="1100" Waste="100"> <Part SheetName="Sheet1"/> </PartAmount> </AmountPool> </Resource> </ResourceSet>
Paper Media including consumption reporting
<Media class="Consumable" DescriptiveName="the paper to print on" Dimension="2891.33858268 1984.2519685" ID="r_000006" MediaType="Paper" ProductID="paperID" Status="Unavailable" Thickness="112.5" Weight="90"/> ... <MediaLink Usage="Input" rRef="r_000006"> <AmountPool> <PartAmount Amount="1000" MaxAmount="1100"> <Part Condition="Good" SheetName="Sheet1" SignatureName="Sig1"/> </PartAmount> <PartAmount MaxAmount="100"> <Part Condition="Waste" SheetName="Sheet1" SignatureName="Sig1"/> </PartAmount> </AmountPool> </MediaLink>
JDF allowes Amount definitions both in the resource and the ResourceLink. XJDF has only one container object, in our case it is the <Resource> that contains an AmountPool.
All planned amounts are defined in:
XJDF/ResourceSet/Resource/AmountPool/PartAmount
All actual amounts are defined in:
XJDF/AuditPool/AuditResource/ResourceSet/Resource/AmountPool/PartAmount
Waste has been made a specific attribute, thus removing the reqirement for Part/@Condition.
ExposedMedia (Plates)
<ResourceSet ID="r_000007" Name="ExposedMedia" ProcessUsage="Plate" Usage="Input"> <Resource ID="r_000007.1" Status="Unavailable"> <Part Separation="Black" SheetName="Sheet1" Side="Front" /> <ExposedMedia MediaRef="r_000008.1"/> </Resource> <Resource ID="r_000007.2" Status="Unavailable"> <Part Separation="Cyan" SheetName="Sheet1" Side="Front" /> <ExposedMedia MediaRef="r_000008.1"/> </Resource> <Resource ID="r_000007.3" Status="Unavailable"> <Part Separation="Magenta" SheetName="Sheet1" Side="Front" /> <ExposedMedia MediaRef="r_000008.1"/> </Resource> <Resource ID="r_000007.4" Status="Unavailable"> <Part Separation="Yellow" SheetName="Sheet1" Side="Front" /> <ExposedMedia MediaRef="r_000008.1"/> </Resource> <Resource ID="r_000007.5" Status="Unavailable"> <Part Separation="Black" SheetName="Sheet1" Side="Back" /> <ExposedMedia MediaRef="r_000008.1"/> </Resource> <Resource ID="r_000007.6" Status="Unavailable"> <Part Separation="Cyan" SheetName="Sheet1" Side="Back" /> <ExposedMedia MediaRef="r_000008.1"/> </Resource> <Resource ID="r_000007.7" Status="Unavailable"> <Part Separation="Magenta" SheetName="Sheet1" Side="Back" /> <ExposedMedia MediaRef="r_000008.1"/> </Resource> <Resource ID="r_000007.8" Status="Unavailable"> <Part Separation="Yellow" SheetName="Sheet1" Side="Back" /> <ExposedMedia MediaRef="r_000008.1"/> </Resource> </ResourceSet> <ResourceSet ID="r_000008" Name="Media"> <Resource DescriptiveName="the plates to use" ID="r_000008.1" Status="Available"> <Media Dimension="2919.68503937 2012.5984252" MediaType="Plate"/> </Resource> </ResourceSet>
ExposedMedia (Plates)
<ExposedMedia class="Handling" ID="r_000007" PartIDKeys="SignatureName SheetName Side Separation" PartUsage="Explicit" Status="Unavailable"> <MediaRef rRef="r_000008"/> <ExposedMedia SignatureName="Sig1"> <ExposedMedia SheetName="Sheet1"> <ExposedMedia Side="Front"> <ExposedMedia Separation="Black"/> <ExposedMedia Separation="Cyan"/> <ExposedMedia Separation="Magenta"/> <ExposedMedia Separation="Yellow"/> </ExposedMedia> <ExposedMedia Side="Back"> <ExposedMedia Separation="Black"/> <ExposedMedia Separation="Cyan"/> <ExposedMedia Separation="Magenta"/> <ExposedMedia Separation="Yellow"/> </ExposedMedia> </ExposedMedia> </ExposedMedia> </ExposedMedia> <Media class="Consumable" DescriptiveName="the plates to use" Dimension="2919.68503937 2012.5984252" ID="r_000008" MediaType="Plate" PartUsage="Implicit" Status="Available"/> ... <ExposedMediaLink ProcessUsage="Plate" Usage="Input" rRef="r_000007"/>
Output Component
<ResourceSet ID="r_000009" Name="Component" Usage="Output"> <Resource DescriptiveName="Description for Component part# 0" ID="r_000009.1" Status="Unavailable"> <Part SheetName="Sheet1" /> <AmountPool> <PartAmount Amount="1000"> <Part Condition="Good" SheetName="Sheet1" /> </PartAmount> </AmountPool> <Component ComponentType=" Sheet" Dimensions="2891.33858268 1984.2519685 0"/> </Resource> </ResourceSet>
Output Component
<Component class="Quantity" ComponentType="FinalProduct Sheet" Dimensions="2891.33858268 1984.2519685 0" ID="r_000009" PartIDKeys="SignatureName SheetName" ProductType="Unknown" Status="Unavailable"> <Component SignatureName="Sig1"> <Component DescriptiveName="Description for Component part# 0" SheetName="Sheet1"/> </Component> </Component> ... <ComponentLink Usage="Output" rRef="r_000009"> <AmountPool> <PartAmount Amount="1000"> <Part Condition="Good" SignatureName="Sig1" SheetName="Sheet1" /> </PartAmount> </AmountPool> </ComponentLink>
End of File
</XJDF>
End of File
</ResourcePool> ... </ResourceLinkPool> </JDF>