Additional Capabilities > Service Information Management > Customizing Windchill Service Information Manager and Windchill Service Parts > Customizing Publishing > Service Application
  
Service Application
Service Application Overview
The Service application on the Arbortext Publishing Engine server manages the initial transformation of the input XML content and markup sent from the WVS SIS Worker and prepares it for publishing.
The Arbortext Publishing Engine server must have the Service application installed and enabled. By default, it’s located in:
Arbortext-path\application\com.ptc.arbortext.service
Description of the Service Document Type
The Service application doctypes directory contains the pubstruct and partslist schemas to manage the generic forms of the publication structure and parts list documents sent by the SIS Worker to the Arbortext Publishing Engine server.
The Service application doctypes directory also contains the pubspec schema, which is used to transform the input publishing specifications sent from the SIS Worker into publishing parameters to apply to the publishing process. A pubspec.xml containing default values is located in:
application\com.ptc.arbortext.service\lib\pubspec.xml
Transforming the Markup
The Service application contains the XLST stylesheets that transform the incoming content and markup into XML appropriate for publishing using the Technical Information sample application. As this is a working sample that covers the process from transformation to publishing, the transformed documents comply with the Technical Information DITA document type schemas. An experienced stylesheet writer can follow the Service application XSL transformation stylesheet commented guidelines as a starting point.
Look for the sample XSLT stylesheets in:
Arbortext-path\application\com.ptc.arbortext.service\doctypes
In the pubstruct subdirectory, techinfomap.xsl (which references ditamap-common.xsl) transforms a publication structure into the Technical Information application map and its topics.
Also in the pubstruct subdirectory, DMPmap.xsl (which references DMPmap-base.xsl and DMPmap-pvz.xsl) transforms an information structure into a format suitable for bundle publishing.
In the partslist subdirectory, techinfo.xsl transforms a parts list into an illustrated part description (IPD).
These XSL transformation stylesheets provide commented guidelines for using them as a sample of what customizations you need to perform for your own document type. These applications are deployed in an application directory on the Arbortext Publishing Engine server.
Understanding the pubstruct XML Markup
The pubstruct schema provides the structure for the generic form of generalized XML document markup sent by the SIS Worker to the Arbortext Publishing Engine server. The Identifier.xml document sent in the payload file is an XML representation of the hierarchical tree structure for either the information structure or the publication structure created in Windchill. The XML markup complies with the pubstruct.xsd schema.
The Identifier.xml document is included with every payload sent from Windchill to Arbortext Publishing Engine server. (For information on the payload file and its contents, see Payload and Manifest.) The Identifier name is machine generated, for example, 00000015.xml.
The Identifier.xml document needs to be transformed into a document that complies with a document type suitable for publishing by Arbortext Publishing Engine or for creating a Arbortext Content Delivery bundle. For example, a Identifier.xml document can be converted to a DITA document that complies with the techinfomap schema, which can then be published to PDF using a print engine on the server that can interpret the XML.
All of the elements are documented in the schema. Look for the following on the Arbortext Publishing Engine server:
Arbortext-path\application\com.ptc.arbortext.service
\doctypes\pubstruct\pubstruct.xsd
Publication Structure Transformation
The table that follows explains how publication structure information is transformed into a techinfomap DITA map structure.
The first column shows the source publication structure markup using an XPath expression
The second column shows the transformed techinfomap markup using an XPath expression
The third column contains additional notes.
Ignore the line breaks for XPath expressions.
Publication Structure Source XPath
techinfomap Result XPath
Notes
/PublicationStructure
/techinfomap
None
/techinfomap
/@xml:lang
The xml:lang parameter overrides the value for this element. Default is en.
None
/techinfomap
/@outputclass
The outputclass parameter overrides the value for this element. There is no default value.
/PublicationStructure
/Title
/techinfomap
/title
/PublicationStructure
//Content[not(@path)
and not(@uri)]
/techinfomap
//division
divison/@format is set to xml.
/PublicationStructure
//Content[@path
and (count(Content)>0
or count(SpecialContent)
>0)]
/Metadata[contains(@source,
'DynamicDocument')]
/Property[@token=
'x-raomContentStructure']
/Value[text()='1']
/techinfomap
//division
/@href=@path
division/@format="dita", division/@scope="local". The Content element has at least one Content or SpecialContent child element.
/PublicationStructure
//Content[@path
and (count(Content)=0
or count(SpecialContent)
=0)]
/Metadata[contains(@source,
'DynamicDocument')]
/Property[@token=
'x-raomContentStructure']
/Value[text()='1']
/techinfomap
//contentref
/@href=@path
contentref/@format="dita", contentref/@scope="local". The Content element has no Content or SpecialContent child element.
/PublicationStructure
//Content[not(@path)
and @uri
and (count(Content)>0
or count(SpecialContent)
>0)]
/Metadata[contains(@source,
'DynamicDocument')]
/Property[@token=
'x-raomContentStructure']
/Value[text()='1']
/techinfomap
//division
/@href=@uri
division/@format="dita", division/@scope="local". The Content element has at least one Content or SpecialContent child element.
/PublicationStructure
//Content[not(@path)
and @uri
and (count(Content)=0
or count(SpecialContent)
=0)]
/Metadata[contains(@source,
'DynamicDocument')]
/Property[@token=
'x-raomContentStructure']
/Value[text()='1']
/techinfomap
//contentref
/@href=@uri
contentref/@format="dita", contentref/@scope="local". The Content element has no Content or SpecialContent child element.
/PublicationStructure
//Content[@path
and (count(Content)>0
or count(SpecialContent)
>0)]
/Metadata[contains(@source,
'DynamicDocument')]
/Property[@token=
'x-raomContentStructure']
/Value[text()='2']
/techinfomap
//division
/@href=@path
division/@format="ditamap", division/@scope="local". The Content element has at least one Content or SpecialContent child element.
/PublicationStructure
//Content[@path
and (count(Content)=0
or count(SpecialContent)
=0)]
/Metadata[contains(@source,
'DynamicDocument')]
/Property[@token=
'x-raomContentStructure']
/Value[text()='2']
/techinfomap
//contentref
/@href=@path
contentref/@format="ditamap", contentref/@scope="local". The Content element has no Content or SpecialContent child element.
/PublicationStructure
//Content[not(@path)
and @uri
and (count(Content)>0
or count(SpecialContent)
>0)]
/Metadata[contains(@source,
'DynamicDocument')]
/Property[@token=
'x-raomContentStructure']
/Value[text()='2']
/techinfomap
//division
/@href=@uri
division/@format="ditamap", division/@scope="local". The Content element has at least one Content or SpecialContent child element.
/PublicationStructure
//Content[not(@path)
and @uri
and (count(Content)=0
or count(SpecialContent)
=0)]
/Metadata[contains(@source,
'DynamicDocument')]
/Property[@token=
'x-raomContentStructure']
/Value[text()='2']
/techinfomap
//contentref
/@href=@uri
contentref/@format="ditamap", contentref/@scope="local". The Content element has no Content or SpecialContent child element.
/PublicationStructure
//Content/Title
/techinfomap
//*[name()=
'division'
or name()='
contentref']
/@navtitle
/PublicationStructure
//Content
/Metadata/Property
[matches(@token,
'\.TitleFromContent$')]
/Value[text()="yes"]
/techinfomap
//*[name()=
'division'
or name()=
'contentref']
/@locktitle="no"
/PublicationStructure
//Content
/Metadata/Property
[matches(@token,
'\.TitleFromContent$')]
/Value[text()!="yes"]
/techinfomap
//*[name()=
'division'
or name()=
'contentref']
/@locktitle="yes"
Set only if Property[matches(@token, '\.TitleFromContent$')]/Value[text()!="yes"] is not specified. Otherwise, it takes the title from the content.
/PublicationStructure
//Content
/Metadata/Property
[@token="sis.base.
ExcludeContent"]
/Value[text()="true"]
/techinfomap
//*[name()=
'division'
or name()=
'contentref']
/@processing-role=
"resource-only"
/PublicationStructure
//Content
/Metadata/Property
[@token="sis.base.
ExcludeTitle"]
/Value[text()="true"]
/techinfomap
//*[name()=
'division'
or name()=
'contentref']
/@toc="no"
Set only if Property[@token="sis.base.ExcludeContent"]/Value[text()!="true"]
/PublicationStructure
//Content
/@targetType
Otherwise:
/PublicationStructure
//Content
/Metadata/Property
[@token=
'x-raomFirstTagName']
/Value
/techinfomap
//*[name()=
'division'
or name()=
'contentref']
/@type
The value of SIS Worker parameter com.ptc.arbortext.pe.service.partlistStylesheet.targetType can override this value if it is set.
/PublicationStructure
//Content
/Metadata/Property
[@token=
'x-raomFirstTagName']
/Value
/techinfomap
//*[name()=
'division'
or name()=
'contentref']
/@type
The value of the SIS Worker parameter com.ptc.arbortext.pe.service.partlistStylesheet.targetType can override this value if it is set.
/PublicationStructure
//SpecialContent
[@type=
"com.ptc.sis.PsToc"]
/techinfomap//toc
/PublicationStructure
//SpecialContent
[@type=
"com.ptc.sis.PsIndex"]
/techinfomap
//index
Sample Publication Structure Identifier.xml
A sample of the generalized XML markup for a publication structure is followed by the resulting techinfomap transformation.
<PublicationStructure
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.PsSection|com.ptc.sis.PsRoot">
<Title>test1</Title>
<Description>0000000012</Description>
<Metadata
source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.PsSection|com.ptc.sis.PsRoot">
<Property token="objNumber"> <Value>0000000012</Value></Property>
<Property token="objName"> <Value>test1</Value></Property>
<Property token="orgid"> <Value>Demo Organization</Value></Property>
</Metadata>
<SpecialContent
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.PsSpecial|com.ptc.sis.PsToc">
<Title>Table of Contents</Title>
<Description>0000000013</Description>
<Metadata
source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.PsSpecial|com.ptc.sis.PsToc">
<Property token="objNumber"><Value>0000000013</Value></Property>
<Property token="objName"><Value>Table of Contents</Value>
</Property>
</Metadata>
</SpecialContent>
<Content
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.PsSection">
<Title>publication section 1</Title>
<Description>0000000030</Description>
<Metadata
source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.PsSection">
<Property token="sis.base.ExcludeContent"><Value>false</Value>
</Property>
<Property token="objNumber"><Value>0000000030</Value></Property>
<Property token="sis.base.ExcludeTitle"><Value>false</Value>
</Property>
<Property token="insertLocationPubsection"></Property>
<Property token="objName"><Value>publication section 1</Value>
</Property>
</Metadata>
<Content
path="com.acme.DynamicDocument\111704.xml"
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.TextualContentRef"
uri="x-wc://file=0000000016.xml">
<Title>Procedure with an image (procedure)</Title>
<Description>0000000017</Description>
<Metadata
source="wt.epm.EPMDocument|com.acme.DynamicDocument">
<Property token="objNumber"><Value>0000000016</Value></Property>
<Property token="x-raomDocTypeName"><Value>techinfo</Value>
</Property>
<Property token="x-raomFirstTagName"><Value>procedure</Value>
</Property>
<Property token="objName"><Value>Procedure with an image
(procedure)</Value></Property>
<Property token="CADName"><Value>0000000016.xml</Value>
</Property>
<Property token="filename"><Value>0000000016.xml</Value>
</Property>
</Metadata>
<Metadata
source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.TextualContentRef">
<Property token="sis.base.ExcludeContent"><Value>false</Value>
</Property>
<Property token="objNumber"><Value>0000000017</Value></Property>
<Property token="sis.base.ExcludeTitle"><Value>false</Value>
</Property>
<Property token="objName"><Value>Procedure with an image (procedure)
</Value></Property>
<Property token="sis.contentholder.TitleFromContent"><Value >false
</Value></Property>
</Metadata>
</Content>
</Content>
<Content
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv|com.ptc.sis.
PsSection">
<Title>Part List Section</Title>
<Description>0000000027</Description>
<Metadata
source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.PsSection">
<Property token="sis.base.ExcludeContent"><Value>false</Value>
</Property>
<Property token="objNumber"><Value>0000000027</Value></Property>
<Property token="sis.base.ExcludeTitle"><Value>false</Value>
</Property>
<Property token="objName"><Value>Part List Section</Value>
</Property>
<Property token="sis.pssection.TitleFromContent"><Value >false
</Value></Property>
</Metadata>
<Content
path="com.ptc.arbortext.windchill.partlist.PartList\0000000004.xml"
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.PartsListRef"
uri="x-wc://com.ptc.arbortext.windchill.partlist.PartList/
0000000004.xml">
<Title>Part List 1</Title>
<Description>0000000028</Description>
<Metadata
source="com.ptc.arbortext.windchill.partlist.PartList">
<Property token="type"><Value>Parts List</Value></Property>
</Metadata>
<Metadata
source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.PartsListRef">
<Property token="sis.base.ExcludeContent"><Value>false</Value>
</Property>
<Property token="objNumber"><Value>0000000028</Value></Property>
<Property token="sis.base.ExcludeTitle"><Value>false</Value>
</Property>
<Property token="objName"><Value>Part List 1</Value></Property>
</Metadata>
</Content>
</Content>
<SpecialContent
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.PsSpecial|com.ptc.sis.PsIndex">
<Title>Index</Title>
<Description>0000000014</Description>
<Metadata
source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.PsSpecial|com.ptc.sis.PsIndex">
<Property token="objNumber"><Value>0000000014</Value></Property>
<Property token="objName"><Value>Index</Value></Property>
</Metadata>
</SpecialContent>
</PublicationStructure>
The following is the resulting techinfomap DITA map:
<techinfomap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/"
xsi:noNamespaceSchemaLocation="urn:ptc:names:arbortext:dita:xsd:
techinfomap.xsd"
xml:lang="en">
<title>test1</title>
<toc/>
<division format="xml" navtitle="publication section 1" locktitle="yes">
<contentref href="com.acme.DynamicDocument\111704.xml" format="dita"
scope="local"
navtitle="Procedure with an image (procedure)"
locktitle="yes"
type="procedure"/>
</division>
<division format="xml" navtitle="Part List Section" locktitle="yes">
<contentref href="com.ptc.arbortext.windchill.partlist.PartList\
0000000004.xml"
format="dita"
scope="local"
navtitle="Part List 1"
locktitle="yes"
type="topic"/>
</division>
<index/>
</techinfomap>
Sample Information Structure Identifier.xml
An excerpt from the generalized XML markup for an information structure using graphical navigation is followed by the resulting DMPmap transformation. Some portions have been excluded for readability, including many common properties for iteration, version, revision, organization, and life cycle state. Several Content and Metadata entries for information structure groups and their contents were removed.
<PublicationStructure
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.IsRoot">
<Title>GraphicalNav</Title>
<Description>0000000017</Description>
<ResourceMap/>
<Metadata
source="com.ptc.arbortext.windchill.asps.services.ASPSMappingAPI">
<Property token="navigation">
<Value>
<MapDefList>
<MapDef repname="graphNav" viewname="view">
<PubNode idref="wt.part.WTPartMaster130414-
wt.viewmarkup.DerivedImage141614">
<g>/2</g>
</PubNode>
<PubNode idref="wt.part.WTPartMaster130427-
wt.viewmarkup.DerivedImage141614">
<g>/160/41</g>
</PubNode>
<PubNode idref="wt.part.WTPartMaster130444-
wt.viewmarkup.DerivedImage141614">
<g>/215/20</g>
</PubNode>
<PubNode idref="wt.part.WTPartMaster141716-
wt.viewmarkup.DerivedImage141614">
<g>/224</g>
</PubNode>
</MapDef>
</MapDefList>
</Value>
</Property>
</Metadata>
<Metadata source="wt.pdmlink.PDMLinkProduct">
<Property token="name"> <Value>graphNavTest</Value></Property>
<Property token="preference.com.ptc.arbortext.windchill.
siscore.translation.SourceLanguage">
<Value>en</Value></Property>
</Metadata>
<Metadata source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.IsRoot">
<Property token="asic.BundleVendor"> <Value>PTC</Value></Property>
<Property token="objNumber"> <Value>0000000017</Value></Property>
<Property token="objName"> <Value>GraphicalNav</Value></Property>
<Property token="sis.group.contentLocation">
<Value>/graphNavTest</Value></Property>
<Property token="isPrimaryASPSRoot"> <Value>true</Value></Property>
<Property token="asic.BundleVolumeId"> <Value>qwerty</Value></Property>
<Property token="sis.group.vizmapping">
<Value>
{wt.part.WTPartMaster:130414-wt.viewmarkup.DerivedImage:141614|/2|}
{wt.part.WTPartMaster:130427-wt.viewmarkup.DerivedImage:141614|/160/41|}
{wt.part.WTPartMaster:130444-wt.viewmarkup.DerivedImage:141614|/215/20|}
{wt.part.WTPartMaster:141716-wt.viewmarkup.DerivedImage:141614|/224|}
</Value>
</Property>
<Property token="asic.BundleName"> <Value>graphNavTest</Value></Property>
</Metadata>
<Content type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.IsGroup">
<Title>ConnectingRod</Title>
<Description>0000000019</Description>
<ResourceMap>
<Resource token="repForConnectingRod">
<Metadata>
<Property token="default"> <Value>true</Value></Property>
</Metadata>
<Content path="reps\185408\Connecting_Rod_sBOM_Part.pvm"
type="Unknown"/>
<Content path="reps\185408\Connecting_Rod_sBOM_Part.pvs"
type="Unknown"/>
<Content path="reps\185408\crankshaft_asm_11.ol" type="OL"/>
<Content path="reps\185408\crankshaft_asm_12.ol" type="OL"/>
<Content path="reps\185408\crankshaft_asm_13.ol" type="OL"/>
<Content path="reps\185408\crankshaft_asm_14.ol" type="OL"/>
<Content path="reps\185408\crankshaft_asm_15.ol" type="OL"/>
<Content path="reps\185408\crankshaft_asm_16.ol" type="OL"/>
<Content path="reps\185408\wvspvp.pvp" type="Unknown"/>
</Resource>
</ResourceMap>
<Metadata source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.IsGroup">
<Property token="sis.base.ExcludeContent">
<Value>false</Value></Property>
<Property token="objNumber">
<Value>0000000019</Value></Property>
<Property token="sis.group.vizmapping">
<Value>
{wt.part.WTPartMaster:152543-wt.viewmarkup.DerivedImage:152555
|/@@PV-AUTO-ID@@002|}
{wt.part.WTPartMaster:152599-wt.viewmarkup.DerivedImage:152555
|/@@PV-AUTO-ID@@003|}
</Value>
</Property>
<Property token="sis.base.ExcludeTitle"> <Value>false</Value></Property>
<Property token="objName"> <Value>ConnectingRod</Value></Property>
<Property token="sis.group.contentLocation">
<Value>/graphNavTest</Value></Property>
</Metadata>
<Content path="com.acme.DADynamicDocument\133110.xml"
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.TextualContentRef"
uri="x-wc://file=0000000531.xml">
<Title>PistonRodMap</Title>
<Description>0000010134</Description>
<Metadata source="wt.epm.EPMDocument|com.acme.DynamicDocument
|com.acme.DADynamicDocument">
<Property token="docType"> <Value>PUB_COMPOUNDTEXT</Value></Property>
<Property token="objNumber"> <Value>0000000531</Value></Property>
<Property token="x-raomContentStructure"> <Value>2</Value></Property>
<Property token="x-raomDocTypeName"> <Value>map</Value></Property>
<Property token="x-raomFirstTagName"> <Value>map</Value></Property>
<Property token="type"> <Value>DADynamicDocument</Value></Property>
<Property token="objName"> <Value>PistonRodMap</Value></Property>
<Property token="derived"> <Value>false</Value></Property>
<Property token="CADName"> <Value>0000000531.xml</Value></Property>
<Property token="missingDependents"> <Value>false</Value></Property>
<Property token="placeHolder"> <Value>false</Value></Property>
<Property token="authoringApplication"> <Value>ARBORTEXT</Value>
</Property>
<Property token="filename"> <Value>0000000531.xml</Value></Property>
<Property token="typeDisplayName"> <Value>DADynamicDocument</Value>
</Property>
</Metadata>
</Content>
<Content path="com.acme.DynamicDocument\128404.jpg"
type="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.IllustrationRef"
uri="x-wc://file=0000000035.jpg">
<Title>excavator3.jpg</Title>
<Description>0000010191</Description>
<Metadata source="wt.epm.EPMDocument|com.acme.DynamicDocument">
<Property token="docType"> <Value>PUB_GRAPHIC</Value></Property>
<Property token="objNumber"> <Value>0000000035</Value></Property>
<Property token="type"> <Value>Dynamic Document</Value></Property>
<Property token="objName"> <Value>excavator3.jpg</Value></Property>
<Property token="derived"> <Value>false</Value></Property>
<Property token="CADName"> <Value>0000000035.jpg</Value></Property>
<Property token="missingDependents"> <Value>false</Value></Property>
<Property token="placeHolder"> <Value>false</Value></Property>
<Property token="authoringApplication"> <Value>GRAPHICSEDITOR</Value>
</Property>
<Property token="filename"> <Value>0000000035.jpg</Value></Property>
<Property token="typeDisplayName"> <Value>Dynamic Document</Value>
</Property>
</Metadata>
<Metadata source="wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.IllustrationRef">
<Property token="sis.base.ExcludeContent"> <Value>false</Value></Property>
<Property token="objNumber"> <Value>0000010191</Value></Property>
<Property token="sis.base.ExcludeTitle"> <Value>false</Value></Property>
<Property token="objName"> <Value>excavator3.jpg</Value></Property>
</Metadata>
</Content>
</PublicationStructure>
As part of an interim conversion step, HTML files are created from XML files in the payload (appending .html to the entire original file name) and referenced graphics are converted for viewing (.pvz format).
The following is the resulting DMPmap DITA map:
<DMPmap xml:lang="en">
<title>GraphicalNav</title>
<DMPmeta>
<DMPprojectinfo encryption="no" projectname="graphNavTest"/>
<data name="contenttype">is</data>
<data name="bundletype">full</data>
<data name="volumename">graphNavTest</data>
<data name="volumeid">qwerty</data>
<data name="vendor">PTC</data>
</DMPmeta>
<languageset locale="en_US">
<topicref id="d8e1" format="xml" navtitle="GraphicalNav" locktitle="yes">
<topicmeta>
<metadata>
<category>com.ptc.arbortext.windchill.asps.services.ASPSMappingAPI
</category>
<data-about type="navigation">
<data name="view">view</data>
<data href="#wt.part.WTPartMaster130414-wt.viewmarkup.
DerivedImage141614">/2</data>
<data href="#wt.part.WTPartMaster130427-wt.viewmarkup.
DerivedImage141614">/160/41</data>
<data href="#wt.part.WTPartMaster130444-wt.viewmarkup.
DerivedImage141614">/215/20</data>
<data href="#wt.part.WTPartMaster141716-wt.viewmarkup.
DerivedImage141614">/224</data>
</data-about>
</metadata>
<metadata>
<category>wt.pdmlink.PDMLinkProduct</category>
<data name="name">graphNavTest</data>
<data name="preference.com.ptc.arbortext.windchill.siscore.
translation.SourceLanguage">en</data>
</metadata>
<metadata>
<category>wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.IsRoot</category>
<data name="asic.BundleVendor">PTC</data>
<data name="objNumber">0000000017</data>
<data name="objName">GraphicalNav</data>
<data name="sis.group.contentLocation">/graphNavTest</data>
<data name="isPrimaryASPSRoot">true</data>
<data name="asic.BundleVolumeId">qwerty</data>
<data name="sis.group.vizmapping">
{wt.part.WTPartMaster:130414-wt.viewmarkup.DerivedImage:
141614|/2|}
{wt.part.WTPartMaster:130427-wt.viewmarkup.DerivedImage:
141614|/160/41|}
{wt.part.WTPartMaster:130444-wt.viewmarkup.DerivedImage:
141614|/215/20|}
{wt.part.WTPartMaster:141716-wt.viewmarkup.DerivedImage:
141614|/224|}
</data>
<data name="asic.BundleName">graphNavTest</data>
</metadata>
</topicmeta>
<topicref id="d8e200" format="xml" navtitle="ConnectingRod" locktitle="yes">
<topicmeta>
<metadata>
<category>com.ptc.arbortext.windchill.asps.services.ASPSMappingAPI
</category>
<data-about type="navigation" href="reps\185408\
Connecting_Rod_sBOM_Part.pvz"
format="pvz">
<data name="view">view</data>
<data href="#wt.part.WTPartMaster152543-wt.viewmarkup.
DerivedImage152555">
/@@PV-AUTO-ID@@002</data>
<data href="#wt.part.WTPartMaster152599-wt.viewmarkup.
DerivedImage152555">
/@@PV-AUTO-ID@@003</data>
</data-about>
</metadata>
<metadata>
<category>wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.BaseDiv
|com.ptc.sis.IsGroup</category>
<data name="sis.base.ExcludeContent">false</data>
<data name="objNumber">0000000019</data>
<data name="sis.group.vizmapping">
{wt.part.WTPartMaster:152543-wt.viewmarkup.
DerivedImage:152555|
/@@PV-AUTO-ID@@002|}
{wt.part.WTPartMaster:152599-wt.viewmarkup.
DerivedImage:152555|
/@@PV-AUTO-ID@@003|}
</data>
<data name="sis.base.ExcludeTitle">false</data>
<data name="objName">ConnectingRod</data>
<data name="sis.group.contentLocation">/graphNavTest</data>
</metadata>
</topicmeta>
</topicref>
<topicref id="d8e341" href="x-wc://file=0000000531.xml"
copy-to="com.acme.DADynamicDocument\133110.xml.html"
scope="local"
format="ditamap"
type="map"
navtitle="PistonRodMap"
locktitle="yes">
<topicmeta>
<metadata>
<category>wt.epm.EPMDocument|com.acme.DynamicDocument|com.acme.
DADynamicDocument</category>
<data name="docType">PUB_COMPOUNDTEXT</data>
<data name="objNumber">0000000531</data>
<data name="x-raomContentStructure">2</data>
<data name="x-raomDocTypeName">map</data>
<data name="x-raomFirstTagName">map</data>
<data name="type">DADynamicDocument</data>
<data name="objName">PistonRodMap</data>
<data name="derived">false</data>
<data name="CADName">0000000531.xml</data>
<data name="missingDependents">false</data>
<data name="placeHolder">false</data>
<data name="authoringApplication">ARBORTEXT</data>
<data name="filename">0000000531.xml</data>
<data name="typeDisplayName">DADynamicDocument</data>
</metadata>
<metadata>
<category>wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.TextualContentRef
</category>
<data name="sis.base.ExcludeContent">false</data>
<data name="objNumber">0000010134</data>
<data name="sis.base.ExcludeTitle">false</data>
<data name="objName">PistonRodMap</data>
<data name="sis.contentholder.TitleFromContent">false</data>
</metadata>
</topicmeta>
</topicref>
<topicref id="d8e2533" href="x-wc://file=0000000035.jpg"
copy-to="com.acme.DynamicDocument\128404.jpg"
scope="local"
format="jpg"
navtitle="excavator3.jpg"
locktitle="yes">
<topicmeta>
<metadata>
<category>wt.epm.EPMDocument|com.acme.DynamicDocument</category>
<data name="docType">PUB_GRAPHIC</data>
<data name="objNumber">0000000035</data>
<data name="type">Dynamic Document</data>
<data name="objName">excavator3.jpg</data>
<data name="derived">false</data>
<data name="CADName">0000000035.jpg</data>
<data name="missingDependents">false</data>
<data name="placeHolder">false</data>
<data name="authoringApplication">GRAPHICSEDITOR</data>
<data name="filename">0000000035.jpg</data>
<data name="typeDisplayName">Dynamic Document</data>
</metadata>
<metadata>
<category>wt.part.WTPart|com.ptc.sis.Base|com.ptc.sis.Content
|com.ptc.sis.ContentRef|com.ptc.sis.IllustrationRef
</category>
<data name="sis.base.ExcludeContent">false</data>
<data name="objNumber">0000010191</data>
<data name="sis.base.ExcludeTitle">false</data>
<data name="objName">excavator3.jpg</data>
</metadata>
</topicmeta>
</topicref>
</languageset>
</DMPmap>
Understanding the partslist XML Markup
The partslist schema provides the structure for the generic form of generalized XML document markup applied to Parts Lists sent by the SIS Worker to the Arbortext Publishing Engine server. The parts list Identifier.xml document is an XML representation of the parts list structure created in Windchill. The manifest.xml in the payload lists it in a directory named com.ptc.arbortext.windchill.partlist.PartList. The parts list Identifier name is machine generated, for example 00000005.xml.
The parts list Identifier.xml document needs to be transformed into a document suitable for publishing by Arbortext Publishing Engine. For example, a parts list Identifier.xml document can be converted to a DITA document that complies with the techinfo schema, which can then be published to an illustrated parts description (IPD) that includes the parts list for the assembly, images, footnotes, links and the like.
Windchill generates the parts list Identifier.xml in an IPD XML format. In general, for each part list property value, a partattribute is generated. The name attribute contains the name of the property. The content of the element contains the value of the property. If the property has more than one value, then each value is wrapped with partattributevalue tags.
The elements are documented in the schema on the Arbortext Publishing Engine:
Arbortext-path\application\com.ptc.arbortext.service\doctypes
\partslist\partslist.xsd
Parts List Transformation
The table that follows explains how Parts List information is transformed to IPD markup.
The first column in the table is the abbreviation assigned to the techinfo markup.
The abbreviations are used in the techinfo IPD markup example.
The second column shows the source Parts List markup using an XPath expression
The third column shows the transformed techinfo IPD markup using an XPath expression
The fourth column contains additional notes.
Ignore the line breaks for XPath expressions.
Abbreviation
Parts List Source XPath
techinfo Result XPath
Notes
IPD-Id
None
/ipd/@id
The parameter overrides the content for this element.
Otherwise, generate-id() generates a value.
IPD-Title
/PartsList
/Metadata
/Property
[@token="name"]
/Value
/ipd/title
The parameter overrides the content for this element.
Otherwise, it uses the value returned by the source XPath.
IPD-Metadata-Source
/PartsList
/Metadata
/@source
/ipd/prolog
/metadata
/category
Multiple /PartsList/Metadata elements can exist.
IPD-Metadata-Property-Name
/PartsList
/Metadata
/Property
/@token
/ipd/prolog
/metadata
/data/@name
Multiple /PartsList/Metadata/Property elements can exist.
IPD-Metadata-Property-Value
/PartsList
/Metadata
/Property/Value
/ipd/prolog
/metadata/data
Multiple /PartsList/Metadata/Property elements can exist.
IPD-Fig-Title
/PartsList
/Images
/Image[1]
/Metadata
/Property
[@token='name']
/Value
/ipd/ipdbody
/fig/title
The parameter overrides the content for this element.
Otherwise, the name attribute from the first image is used as the title.
IPD-Fig-Path
/PartsList
/Images
/Image[@type !=
'c3di']
/Metadata
/Property
[@token=
'CADName']
/Value
/ipd/ipdbody
/fig/image
/@href
Multiple /PartsList/Images/Image elements can exist.
IPD-Fig-View
/PartsList
/Images
/Image
/Metadata
/Property[@token
='printView']
/Value
/ipd/ipdbody
/fig/image
/@rev
Multiple /PartsList/Images/Image elements can exist.
IPD-Fig-View
/PartsList
/Images
/Image[@type =
'c3di']
/ResourceMap
/Resource[@token
='default']
/Content/@path
/ipd/ipdbody
/fig/image
/@rev
Multiple /PartsList/Images/Image elements can exist.
IPD-Part-Item-Attribute-Name
/PartsList/Items
/Item/Metadata
/Property
/@token
/ipd/ipdbody
/partlist
/partitem
/partattribute
/@name
Multiple /PartsList/Items/Item/Metadata/Property elements can exist.
IPD-Part-Item-Attribute-Value
/PartsList/Items
/Item/Metadata
/Property/Value
/ipd/ipdbody
/partlist
/partitem
/partattribute
Multiple /PartsList/Items/Item/Metadata/Property elements can exist.
The following is an example of an ipd DITA file with the abbreviations in context, and the XML declarations removed. Text wrapped in braces { } shows the locations where Parts List property values are inserted into the template.
<ipd
id="{IPD-Id}"
xml:lang="en"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation=
"urn:ptc:names:arbortext:dita:xsd:techinfo.xsd">
<title>{IPD-Title}</title>
<prolog>
<metadata>
<category>{IPD-Metadata-Source}</category>
<data name="{IPD-Metadata-Property-Name}">{IPD-Metadata-Property-Value}
</data>
</metadata>
</prolog>
<ipdbody>
<fig>
<title>{IPD-Fig-Title}</title>
<image href="{IPD-Fig-Path}"/>
</fig>
<partlist>
<partitem>
<partattribute name="{IPD-Part-Item-Attribute-Name}">
{IPD-Part-Item-Attribute-Value}</partattribute>
<partattribute name="{IPD-Part-Item-Attribute-Name}">
<partattributevalue>{IPD-Part-Item-Attribute-Value}
</partattributevalue>
<partattributevalue>{IPD-Part-Item-Attribute-Value}
</partattributevalue>
</partattribute>
</partitem>
</partlist>
</ipdbody>
</ipd>
Sample Parts List Identifier.xml
The following samples are excerpts from the generalized XML markup for a parts list.
The first excerpt shows the Parts List metadata properties generalized XML markup:
<?xml version="1.0" encoding="UTF-8"?>
<PartsList Version="1.0">
<Metadata source="com.ptc.arbortext.windchill.partlist.PartList">
<Property token="iterationInfo.identifier.iterationId" type=
"java.lang.String"><Value>4</Value>
</Property>
<Property token="ownership.owner.name"><Value/></Property>
<Property token="organizationName" type="java.lang.String">
<Value>Demo Organization</Value></Property>
<Property token="versionIdentifer.versionId" type=
"java.lang.String"><Value>A</Value>
</Property>
<Property token="number" type="java.lang.String">
<Value>0000000005</Value></Property>
<Property token="thePersistInfo.modifyStamp" type="wt.util.
WrappedTimestamp"><Value>2011-09-21 18:37:59.0</Value>
</Property>
<Property token="type" type="java.lang.String">
<Value>Parts List</Value></Property>
<Property token="orgName" type="java.lang.String">
<Value>Demo Organization</Value></Property>
<Property token="version" type="java.lang.String">
<Value>A</Value></Property>
<Property token="iteration" type="java.lang.String">
<Value>4</Value></Property>
<Property token="revision" type="java.lang.String">
<Value>A</Value></Property>
<Property token="creator.name" type="java.lang.String">
<Value>demo</Value></Property>
<Property token="modifiedBy.name"><Value/></Property>
<Property token="versionInfo.identifier.versionId" type=
"java.lang.String"><Value>A</Value></Property>
<Property token="name" type="java.lang.String">
<Value>TRANSISTORS</Value></Property>
<Property token="last_updated" type="wt.util.WrappedTimestamp">
<Value>2011-09-21 18:37:59.0</Value></Property>
<Property token="thePersistInfo.createStamp" type="wt.util.WrappedTimestamp">
<Value>2011-09-21 16:21:10.0</Value></Property>
</Metadata>
The following is an excerpt of the resulting techinfo DITA document in IPD format showing the Parts List metadata transformed to prolog:
<ipd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ditaarch="http://dita.oasis-open.org/architecture/2005/"
xml:lang="en"
xsi:noNamespaceSchemaLocation="urn:ptc:names:arbortext:dita:xsd:techinfo.xsd"
id="d1">
<title>TRANSISTORS</title>
<prolog>
<metadata>
<category>com.ptc.arbortext.windchill.partlist.PartList</category>
<data name="iterationInfo.identifier.iterationId">4</data>
<data name="ownership.owner.name"/>
<data name="organizationName">Demo Organization</data>
<data name="versionIdentifer.versionId">A</data>
<data name="number">0000000005</data>
<data name="thePersistInfo.modifyStamp">2011-09-21 18:37:59.0
</data>
<data name="type">Parts List</data>
<data name="orgName">Demo Organization</data>
<data name="version">A</data>
<data name="iteration">4</data>
<data name="revision">A</data>
<data name="creator.name">demo</data>
<data name="modifiedBy.name"/>
<data name="versionInfo.identifier.versionId">A</data>
<data name="name">TRANSISTORS</data>
<data name="last_updated">2011-09-21 18:37:59.0</data>
<data name="thePersistInfo.createStamp">2011-09-21 16:21:10.0
</data>
</metadata>
</prolog>
The following excerpt shows parts list item metadata properties generalized XML markup:
<Item>
<Metadata source="com.ptc.arbortext.windchill.partlist.PartListItem">
<Property token="instanceIds"><Value/></Property>
<Property token="serviceable" type="java.lang.Boolean">
<Value>true</Value></Property>
<Property token="itemQuantity" type="java.lang.String">
<Value>1</Value></Property>
<Property token="illustrated" type="java.lang.Boolean">
<Value>true</Value></Property>
<Property token="indenture" type="java.lang.Long">
<Value>0</Value></Property>
<Property token="itemSequenceNumber.value"><Value/>
</Property>
<Property token="remarks" type="java.lang.String">
<Value>Transistor</Value></Property>
<Property token="thePersistInfo.modifyStamp" type="wt.util.
WrappedTimestamp"><Value>2011-09-21 18:01:52.0</Value>
</Property>
<Property token="itemNumber" type="java.lang.String">
<Value>3</Value></Property>
<Property token="type" type="java.lang.String">
<Value>Parts List Item</Value></Property>
<Property token="thePersistInfo.createStamp" type="wt.util.
WrappedTimestamp"><Value>2011-09-21 18:01:52.0</Value>
</Property>
</Metadata>
<Metadata source="wt.part.WTPart">
<Property token="objName" type="java.lang.String">
<Value>2SC1846-R</Value></Property>
<Property token="orgid" type="java.lang.String">
<Value>Demo Organization</Value></Property>
<Property token="objNumber" type="java.lang.String">
<Value>0000000026</Value></Property>
<Property token="name" type="java.lang.String">
<Value>2SC1846-R</Value></Property>
<Property token="last_updated" type="wt.util.WrappedTimestamp">
<Value>2011-09-21 16:28:16.0</Value></Property>
<Property token="number" type="java.lang.String">
<Value>0000000026</Value></Property>
<Property token="state.state" type="java.lang.String">
<Value>INWORK</Value></Property>
<Property token="thePersistInfo.modifyStamp" type="wt.util.
WrappedTimestamp"><Value>2011-09-21 16:28:16.0</Value>
</Property>
<Property token="lifeCycleState" type="java.lang.String">
<Value>INWORK</Value></Property>
<Property token="organizationIdentifier" type="java.lang.String">
<Value>Demo Organization</Value></Property>
</Metadata>
</Item>
The following is an excerpt of the resulting techinfo DITA document in IPD format showing the Parts List item metadata transformed to partattribute entries for partitem.
<ipdbody>
<partlist>
<partitem>
<partattribute name="instanceIds"/>
<partattribute name="serviceable">true</partattribute>
<partattribute name="itemQuantity">1</partattribute>
<partattribute name="illustrated">true</partattribute>
<partattribute name="indenture">0</partattribute>
<partattribute name="itemSequenceNumber.value"/>
<partattribute name="remarks">Transistor</partattribute>
<partattribute name="thePersistInfo.modifyStamp">
2011-09-21 18:01:52.0</partattribute>
<partattribute name="itemNumber">3</partattribute>
<partattribute name="type">Parts List Item</partattribute>
<partattribute name="thePersistInfo.createStamp">
2011-09-21 18:01:52.0</partattribute>
<partattribute name="objName">2SC1846-R</partattribute>
<partattribute name="orgid">Demo Organization</partattribute>
<partattribute name="objNumber">0000000026</partattribute>
<partattribute name="name">2SC1846-R</partattribute>
<partattribute name="last_updated">2011-09-21 16:28:16.0
</partattribute>
<partattribute name="number">0000000026</partattribute>
<partattribute name="state.state">INWORK</partattribute>
<partattribute name="thePersistInfo.modifyStamp">
2011-09-21 16:28:16.0</partattribute>
<partattribute name="lifeCycleState">INWORK</partattribute>
<partattribute name="organizationIdentifier">
Demo Organization</partattribute>
</partitem>
</partlist>
</ipdbody>