<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Packaging Team Blog: Open Packaging Conventions</title><link>http://blogs.msdn.com/opc/default.aspx</link><description>Your Data: Accessible, Findable, Searchable, and Secure</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>November MSDN Magazine feature on OPC Digital Signature UX</title><link>http://blogs.msdn.com/opc/archive/2009/11/09/november-msdn-magazine-feature-on-digital-signature-ux.aspx</link><pubDate>Mon, 09 Nov 2009 20:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9919774</guid><dc:creator>jack davis</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/opc/comments/9919774.aspx</comments><wfw:commentRss>http://blogs.msdn.com/opc/commentrss.aspx?PostID=9919774</wfw:commentRss><description>&lt;P&gt;This &lt;A href="http://msdn.microsoft.com/en-us/magazine/ee725283.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/ee725283.aspx"&gt;month’s issue of &lt;STRONG&gt;MSDN Magazine&lt;/STRONG&gt; (November 2009)&lt;/A&gt; includes our article on designing effective digital signature user experiences – check it out at:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/magazine/dd890995.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/dd890995.aspx"&gt;&lt;STRONG&gt;Digital Signatures:&lt;/STRONG&gt; Application Guidelines on Digital Signature Practices for Common Criteria Security&lt;/A&gt; &lt;BR&gt;&lt;A title=http://msdn.microsoft.com/en-us/magazine/dd890995.aspx href="http://msdn.microsoft.com/en-us/magazine/dd890995.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/dd890995.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/dd890995.aspx&lt;/A&gt;&amp;nbsp; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The article focuses on user experience (UX) considerations to make electronic signatures as easy to use and understand as hand-written signatures.&amp;nbsp; Digital signatures, however, add particular UI caveats that developers and UX designers need to consider.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9919774" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/opc/archive/tags/Digital+Signature/default.aspx">Digital Signature</category><category domain="http://blogs.msdn.com/opc/archive/tags/Open+Packaging+Conventions/default.aspx">Open Packaging Conventions</category><category domain="http://blogs.msdn.com/opc/archive/tags/OPC/default.aspx">OPC</category></item><item><title>Introduction to Windows 7 Packaging Digital Signature APIs - Pointers to learning resources</title><link>http://blogs.msdn.com/opc/archive/2009/09/04/introduction-to-windows-7-packaging-digital-signature-apis-pointers-to-learning-resources.aspx</link><pubDate>Fri, 04 Sep 2009 20:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9891537</guid><dc:creator>Ruke Huang</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/opc/comments/9891537.aspx</comments><wfw:commentRss>http://blogs.msdn.com/opc/commentrss.aspx?PostID=9891537</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Chapter 12 of the Open Packaging Conventions (OPC) standard (&lt;/FONT&gt;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=123375" mce_href="http://go.microsoft.com/fwlink/?LinkId=123375"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;ECMA 376-2 1st edition, 2006&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;) defines the functionality and operation of “digital signatures” for signing content stored in OPC-based file formats.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Windows 7 incorporates built-in native-code support for accessing OPC-based files along with support to both signing and validating stored content using digital signatures.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This blog provides links to information about digital signatures and how to use the OPC digital signature APIs. &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;OPC digital signatures are based on the W3C &lt;/FONT&gt;&lt;A href="http://www.w3.org/TR/xmldsig-core/" mce_href="http://www.w3.org/TR/xmldsig-core/"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;XML Signature Syntax and Processing&lt;/FONT&gt;&lt;/I&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; specification (aka, “XML DigSig”). &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;As background to understand OPC digital signatures, it’s helpful to first read the XML DigSig specification&lt;/FONT&gt;&lt;FONT size=3 face=Calibri&gt;. The MSDN &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd742822.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd742822.aspx"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Packaging API Overview&lt;/FONT&gt;&lt;/I&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; provides a starting point for learning about the Windows 7 Packaging APIs and associated digital signature APIs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;After reading the &lt;I style="mso-bidi-font-style: normal"&gt;Packaging API Overview&lt;/I&gt; then you can continue with the MSDN &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd742698.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd742698.aspx"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Digital Signatures Overview&lt;/FONT&gt;&lt;/I&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; to familiarize yourself with Packaging digital signature APIs.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Of course, seeing actual working sample code is a great way to understand a new set of APIs.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd742815(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd742815(VS.85).aspx"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Music Bundle Signature Sample&lt;/FONT&gt;&lt;/I&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; is very useful in showing how the APIs actually operate. This sample shows how you can use OPC digital signature APIs to sign content stored in a package and then later validate the signature along with the associated signed content.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9891537" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/opc/archive/tags/Digital+Signature/default.aspx">Digital Signature</category><category domain="http://blogs.msdn.com/opc/archive/tags/Open+Packaging+Conventions/default.aspx">Open Packaging Conventions</category><category domain="http://blogs.msdn.com/opc/archive/tags/OPC/default.aspx">OPC</category></item><item><title>Comparing the OPC managed-code and native-code Part URI helper APIs</title><link>http://blogs.msdn.com/opc/archive/2009/08/18/comparing-the-opc-managed-code-and-native-code-part-uri-helper-apis.aspx</link><pubDate>Tue, 18 Aug 2009 22:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9874446</guid><dc:creator>opc</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/opc/comments/9874446.aspx</comments><wfw:commentRss>http://blogs.msdn.com/opc/commentrss.aspx?PostID=9874446</wfw:commentRss><description>&lt;P&gt;Windows 7 includes new native-code APIs that provide functionality to compose and parse Part URIs. These APIs are provided through the &lt;A href="http://msdn.microsoft.com/en-us/library/dd316778(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316778(VS.85).aspx"&gt;IOpcUri&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/dd371083(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371083(VS.85).aspx"&gt;IOpcPartUri&lt;/A&gt; interfaces. Managed-code provides similar functionality with the System.IO.Packaging &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.aspx"&gt;PackUriHelper&lt;/A&gt; class.&lt;/P&gt;
&lt;P&gt;A difference between the two API sets is that while the managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.aspx"&gt;PackUriHelper&lt;/A&gt; APIs support both Pack URIs and Part URIs (also called "part names"), the native-code &lt;A href="http://msdn.microsoft.com/en-us/library/dd371008.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371008.aspx"&gt;IOpcFactory::CreatePartUri&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/dd371083.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371083.aspx"&gt;IOpcPartUri&lt;/A&gt; APIs only provide functionality to create and manage Part URIs. The &lt;A href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;native-code Packaging APIs&lt;/A&gt; do not provide any functionality to access packages or package content as external resources, and therefore only supports Part URIs to address part content within the immediate package.&lt;/P&gt;
&lt;P&gt;The managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.aspx"&gt;PackUriHelper&lt;/A&gt; and native-code &lt;A href="http://msdn.microsoft.com/en-us/library/dd371008.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371008.aspx"&gt;CreatePartUri&lt;/A&gt;/&lt;A href="http://msdn.microsoft.com/en-us/library/dd371083.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371083.aspx"&gt;IOpcPartUri&lt;/A&gt; APIs are both designed to be &lt;A href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(DOCX).zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(DOCX).zip"&gt;ECMA 376-2 (2006)&lt;/A&gt; compliant.&lt;/P&gt;
&lt;P&gt;The table below shows a comparison between the managed-code and native-code APIs, and which APIs provide similar functionality: 
&lt;TABLE border=1 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;STRONG&gt;Managed API&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;STRONG&gt;Equivalent Native API&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;
&lt;P&gt;&lt;STRONG&gt;Parity&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.createparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.createparturi.aspx"&gt;PackUriHelper.CreatePartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd371008(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371008(VS.85).aspx"&gt;IOpcFactory::CreatePartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;
&lt;P&gt;See 1.1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;No equivalent API&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd371005(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371005(VS.85).aspx"&gt;IOpcFactory::CreatePackageRootUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getrelationshipparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getrelationshipparturi.aspx"&gt;PackUriHelper.GetRelationshipPartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd316784(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316784(VS.85).aspx"&gt;IOpcUri::GetRelationshipsPartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;
&lt;P&gt;Identical&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getrelativeuri.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getrelativeuri.aspx"&gt;PackUriHelper.GetRelativeUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd316788(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316788(VS.85).aspx"&gt;IOpcUri::GetRelativeUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;
&lt;P&gt;Identical&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.resolveparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.resolveparturi.aspx"&gt;PackUriHelper.ResolvePartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx"&gt;IOpcUri::CombinePartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;
&lt;P&gt;See 1.2&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.compareparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.compareparturi.aspx"&gt;PackUriHelper.ComparePartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd371087(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371087(VS.85).aspx"&gt;IOpcPartUri::ComparePartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;
&lt;P&gt;Identical&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getsourceparturifromrelationshipparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getsourceparturifromrelationshipparturi.aspx"&gt;PackUriHelper.GetSourcePartUriFromRelationshipPartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd371092(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371092(VS.85).aspx"&gt;IOpcPartUri::GetSourceUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;
&lt;P&gt;Identical&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.isrelationshipparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.isrelationshipparturi.aspx"&gt;PackUriHelper.IsRelationshipPartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd371097(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371097(VS.85).aspx"&gt;IOpcPartUri::IsRelationshipsPartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;
&lt;P&gt;Identical&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.create.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.create.aspx"&gt;PackUriHelper.Create&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;No equivalent API&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.comparepackuri.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.comparepackuri.aspx"&gt;PackUriHelper.ComparePackUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;No equivalent API&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getnormalizedparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getnormalizedparturi.aspx"&gt;PackUriHelper.GetNormalizedPartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;No equivalent API&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getpackageuri.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getpackageuri.aspx"&gt;PackUriHelper.GetPackageUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;No equivalent API&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=325&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getparturi.aspx"&gt;PackUriHelper.GetPartUri&lt;/A&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=212&gt;
&lt;P&gt;No equivalent API&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=70&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;H4&gt;1. API differences&lt;/H4&gt;
&lt;P&gt;&lt;B&gt;1.1&lt;/B&gt;&lt;B&gt; IOpcFactory::CreatePartUri differences from PackUriHelper.CreatePartUri&lt;/B&gt; &lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The functionality of the native-code &lt;A href="http://msdn.microsoft.com/en-us/library/dd371008(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371008(VS.85).aspx"&gt;IOpcFactory::CreatePartUri&lt;/A&gt; API, follows the rules provided in &lt;A href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(DOCX).zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(DOCX).zip"&gt;ECMA 376-2 OPC standard&lt;/A&gt;, Appendix A.3 for resolving a relative reference to a valid Part URI (part name). The &lt;A href="http://msdn.microsoft.com/en-us/library/dd371008(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371008(VS.85).aspx"&gt;IOpcFactory::CreatePartUri&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx"&gt;IOpcUri::CombinePartUri&lt;/A&gt; native-code APIs both produce the same output ("Native-code Behavior" below). &lt;/P&gt;
&lt;P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;&lt;STRONG&gt;Input&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;&lt;STRONG&gt;Native-code CreatePartUri Behavior&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=211&gt;
&lt;P&gt;&lt;STRONG&gt;Managed-code CreatePartUri Behavior&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Contains bad UTF-8 encoding e.g. '%FC':&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Leaves %FC unchanged in output.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=211&gt;
&lt;P&gt;Changes to valid UTF-8 output %C3%BC. (See * below)&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Contains empty segments i.e. multiple forward slashes&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Collapses multiple forward slashes to a single forward slash.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=211&gt;
&lt;P&gt;Does not collapse. (This is OPC rule violation).&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Begins with 2 or more forward slashes&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Collapses multiple forward slashes to a single forward slash.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=211&gt;
&lt;P&gt;Fails, throws an "ArgumentException".&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Contains a single trailing forward slash&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Removes trailing slash.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=211&gt;
&lt;P&gt;Fails, throws an "ArgumentException".&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Contains a percent-encoded NULL (%00)&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Returns an "E_UNEXPECTED" HRESULT error.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=211&gt;
&lt;P&gt;Percent-encoded NULL is kept unchanged, and returns a valid part name.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;* - Characters above 0x7F are required to be escaped using UTF-8. For example, if the input URI contains %FC, which is not a legal UTF-8 sequence, the rules provided in RFC 3987 section 3.1, require leaving the input unchanged. The &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.createparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.createparturi.aspx"&gt;PackUriHelper.CreatePartUri&lt;/A&gt; method however, decodes %FC as UTF-16 to its octet &amp;lt;FC&amp;gt; (character 'ü') and then re-encodes it to the valid UTF-8, '%C3%BC'. Unfortunately, this approach is incompliant with RFC rules. [Note: If the relative reference contains a %FC, both &lt;A href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx"&gt;IOpcUri::CombinePartUri&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.resolveparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.resolveparturi.aspx"&gt;PackUriHelper.ResolvePartUri&lt;/A&gt; leave it unchanged.]&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;1.2 &lt;/B&gt;&lt;B&gt;IOpcUri::CombinePartUri differences from PackUriHelper.ResolvePartUri&lt;/B&gt;&lt;B&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;The managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.resolveparturi.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.resolveparturi.aspx"&gt;PackUriHelper.ResolvePartUri&lt;/A&gt; API differs from the native-code &lt;A href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx"&gt;IOpcUri::CombinePartUri&lt;/A&gt; API in that it resolves the input relative reference against a base URI, but it does not ensure that the result is a valid part name. In contrast, the native-code &lt;A href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316782(VS.85).aspx"&gt;IOpcUri::CombinePartUri&lt;/A&gt; API both resolves the input and ensures that the result is a valid part name. 
&lt;TABLE border=1 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;&lt;STRONG&gt;Input&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;&lt;STRONG&gt;Native-code CombinePartUri Behavior&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=217&gt;
&lt;P&gt;&lt;STRONG&gt;Managed-code ResolvePartUri Behavior&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Contains percent-encoded unreserved characters&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Un-encodes unreserved characters, resulting in a valid part name.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=217&gt;
&lt;P&gt;Leaves characters in encoded form resulting in an invalid part name.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Contains empty segments i.e. multiple forward slashes&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Collapses multiple slashes to a single forward slash, resulting in a valid part name.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=217&gt;
&lt;P&gt;Does not collapse empty segments, resulting in an invalid part name.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Begins with 2 or more forward slashes&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Collapses multiple slashes to a single forward slash, resulting in a valid part name&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=217&gt;
&lt;P&gt;Fails, throws an "ArgumentException".&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Contains a single trailing forward slash&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Removes trailing slash.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=217&gt;
&lt;P&gt;Does not remove trailing slash resulting in an invalid part name.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Contains a percent-encoded NULL (%00)&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=201&gt;
&lt;P&gt;Returns an " E_UNEXPECTED " HRESULT error.&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top width=217&gt;
&lt;P&gt;Percent-encoded NULL is kept unchanged, and returns a valid part name.&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;- Ali Naqvi&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9874446" width="1" height="1"&gt;</description></item><item><title>Comparing the OPC Managed-Code and Native-Code APIs</title><link>http://blogs.msdn.com/opc/archive/2009/08/05/comparison-between-the-opc-managed-code-and-native-code-apis.aspx</link><pubDate>Thu, 06 Aug 2009 00:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9858550</guid><dc:creator>opc</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/opc/comments/9858550.aspx</comments><wfw:commentRss>http://blogs.msdn.com/opc/commentrss.aspx?PostID=9858550</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://www.microsoft.com/windows/windows-7/default.aspx" mce_href="http://www.microsoft.com/windows/windows-7/default.aspx"&gt;Windows 7&lt;/A&gt;&lt;/STRONG&gt; incorporates a new set of native-code APIs that provide integrated support for the &lt;A href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(DOCX).zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Office Open XML 1st edition Part 2 (DOCX).zip"&gt;ECMA 376-2 (2006)&lt;/A&gt; Open Packaging Conventions (OPC) standard.&amp;nbsp; These new &lt;A href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;native-code Packaging APIs&lt;/A&gt; provide similar functionality to what had previously been available in .NET managed-code through the &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx"&gt;System.IO.Packaging&lt;/A&gt; APIs. &lt;/P&gt;
&lt;P&gt;This article highlights programming differences between the native-code and managed-code APIs, and will be useful to developers who are looking to transition applications from one API environment to the other.&amp;nbsp; Both OPC APIs are compliant with the &lt;A href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(DOCX).zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Office Open XML 1st edition Part 2 (DOCX).zip"&gt;ECMA 376-2 (2006)&lt;/A&gt; standard, and files created by either API set can be compatibly accessed by the other.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Differences Between the OPC Managed-code and Native-code APIs&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Zip Encoding:&lt;BR&gt;&lt;/STRONG&gt;The managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx"&gt;System.IO.Packaging&lt;/A&gt; APIs create packages using the ZIP32 encoding by default. You cannot specify which encoding to use when creating the package. If the package size exceeds the limits imposed by ZIP32 encoding, the package is automatically saved using ZIP64 encoding. The &lt;A href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;native-code Packaging APIs&lt;/A&gt; differ in that they create packages using ZIP64 encoding by default. You can specify in the &lt;A href="http://msdn.microsoft.com/en-us/library/dd371021(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371021(VS.85).aspx"&gt;IOpcFactory::WritePackageToStream&lt;/A&gt; API flags to use ZIP32 encoding, however, if the package size exceeds the limits imposed by ZIP32 encoding, the API will fail and the package will not be saved.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;In-place Editing:&lt;BR&gt;&lt;/STRONG&gt;The managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx"&gt;System.IO.Packaging&lt;/A&gt; APIs allow you to open a package, make changes to the content, and then save the changes back to the package. The &lt;A href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;native-code Packaging APIs&lt;/A&gt; differ in that they do not allow you to edit a package in place. They can read a package using the &lt;A href="http://msdn.microsoft.com/en-us/library/dd371017.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371017.aspx"&gt;IOpcFactory::ReadPackageFromStream&lt;/A&gt; API, make edits, and then save to another package file via the &lt;A href="http://msdn.microsoft.com/en-us/library/dd371021.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371021.aspx"&gt;IOpcFactory::WritePackageToStream&lt;/A&gt; API. Using the APIs to simultaneously read and write to the same stream, or to open two streams to the same file at the same time is not supported.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Core properties API:&lt;/STRONG&gt;&lt;BR&gt;The native-code API currently does not provide any equivalent of the managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packageproperties.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packageproperties.aspx"&gt;PackageProperties&lt;/A&gt; class, which provides ability to read and edit the Core Properties part. When using the native-code APIs you will have to manually get the Core Properties part from the package, parse it, and then edit its contents. The MSDN &lt;A href="http://msdn.microsoft.com/en-us/library/dd742835.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd742835.aspx"&gt;Set Author Sample&lt;/A&gt; shows how to access and update the contents of the Core Properties part.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Pack URI support:&lt;/STRONG&gt;&lt;BR&gt;The managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.aspx"&gt;PackUriHelper&lt;/A&gt; class supports creating URIs based on the &lt;STRONG&gt;Pack URI&lt;/STRONG&gt; scheme* (pack://) that address both parts in a package and an entire package. The &lt;A href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;native-code Packaging APIs&lt;/A&gt; only make use of part URIs, and as such, only support creating and operating with the path component of Pack URIs that represent part names (&lt;A href="http://msdn.microsoft.com/en-us/library/dd371008.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371008.aspx"&gt;IOpcFactory::CreatePartUri&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/dd371083.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371083.aspx"&gt;IOpcPartUri&lt;/A&gt;).&lt;BR&gt;*&lt;A href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(DOCX).zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Office Open XML 1st edition Part 2 (DOCX).zip"&gt;ECMA 376-2 (2006)&lt;/A&gt;, Annex B&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;PackWebRequest/PackWebResponse:&lt;BR&gt;&lt;/STRONG&gt;The managed-code API includes &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packwebrequest.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packwebrequest.aspx"&gt;PackWebRequest&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packwebresponse.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.packwebresponse.aspx"&gt;PackWebResponse&lt;/A&gt; classes that allow you to access content within a URI-addressable package stored on a website. PackWebRequest and PackWebResponse are based on the managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.net.webrequest.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.net.webrequest.aspx"&gt;WebRequest&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/system.net.webresponse.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.net.webresponse.aspx"&gt;WebResponse&lt;/A&gt;&amp;nbsp;classes that support URI requests to access resources over the web. The native-code API provides no equivalent to this feature.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Content Types Stream missing in the Package:&lt;BR&gt;&lt;/STRONG&gt;The &lt;A href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(DOCX).zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Office Open XML 1st edition Part 2 (DOCX).zip"&gt;ECMA 376-2 (2006)&lt;/A&gt; OPC standard is unclear as to what to do if the [Content_Types].xml stream is missing. If the [Content_Types].xml stream is missing the managed-code &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.package.open.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.package.open.aspx"&gt;Package.Open&lt;/A&gt; method will open the package, as if it were empty. (If the [Content_Types].xml stream is missing, none of the parts in the package are recognized as valid parts.) The native-code &lt;A href="http://msdn.microsoft.com/en-us/library/dd371017.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371017.aspx"&gt;IOpcFactory::ReadPackageFromStream&lt;/A&gt; API, however, considers a package without a [Content_Types].xml stream an error, and will fail if there is no [Content_Types].xml stream.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Compression for Relationships Parts:&lt;BR&gt;&lt;/STRONG&gt;In the managed-code APIs, the relationships parts use the same compression as the source part; and for the package relationships part, no compression is used. In the native-code API, all relationships parts use a default compression of &lt;A href="http://msdn.microsoft.com/en-us/library/dd371456.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371456.aspx"&gt;OPC_COMPRESSION_NORMAL&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Accessing Relationships Parts:&lt;/STRONG&gt;&lt;BR&gt;The managed-code APIs allow you to use the &lt;A href="http://msdn.microsoft.com/en-us/library/system.io.packaging.package.getpart.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.package.getpart.aspx"&gt;Package.GetPart&lt;/A&gt; API with the name of the relationships part to get that part and its content. They also allow you to perform all operations that are permitted on parts.&lt;/P&gt;
&lt;P&gt;The &lt;A href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;native-code Packaging APIs&lt;/A&gt; do not allow direct access to relationships parts. &lt;A href="http://msdn.microsoft.com/en-us/library/dd371062.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371062.aspx"&gt;IOpcPartSet::GetPart&lt;/A&gt; will return an error if requesting a part with a relationships part name. Instead you can call &lt;A href="http://msdn.microsoft.com/en-us/library/dd371127.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371127.aspx"&gt;IOpcPart::GetRelationshipSet&lt;/A&gt; or &lt;A href="http://msdn.microsoft.com/en-us/library/dd371033.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371033.aspx"&gt;IOpcPackage::GetRelationshipSet&lt;/A&gt; to get the &lt;A href="http://msdn.microsoft.com/en-us/library/dd371217.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371217.aspx"&gt;IOpcRelationshipSet&lt;/A&gt; object. The IOpcRelationshipSet object provides access to the individual relationships, and a read-only stream to the relationships markup.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Editing Relationship Stream:&lt;/STRONG&gt;&lt;BR&gt;The managed-code APIs allow you to get the stream for a relationship part's content, and edit it. The native-code &lt;A href="http://msdn.microsoft.com/en-us/library/dd316532.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd316532.aspx"&gt;IOpcRelationshipSet::GetRelationshipsContentStream&lt;/A&gt; API only provides a read-only stream to the relationship part's content. To add or delete relationships from the &lt;A href="http://msdn.microsoft.com/en-us/library/dd371217.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371217.aspx"&gt;IOpcRelationshipSet&lt;/A&gt;, you need to use the &lt;A href="http://msdn.microsoft.com/en-us/library/dd371219.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371219.aspx"&gt;CreateRelationship&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/en-us/library/dd371224.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371224.aspx"&gt;DeleteRelationship&lt;/A&gt; APIs.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;- Ali Naqvi&lt;/EM&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9858550" width="1" height="1"&gt;</description></item><item><title>Adventures in Packaging - Episode 1</title><link>http://blogs.msdn.com/opc/archive/2009/05/18/adventures-in-packaging-episode-1.aspx</link><pubDate>Mon, 18 May 2009 07:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9624786</guid><dc:creator>jack davis</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/opc/comments/9624786.aspx</comments><wfw:commentRss>http://blogs.msdn.com/opc/commentrss.aspx?PostID=9624786</wfw:commentRss><description>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:94b140bb-13d5-4494-b465-5efe5a72fd07" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/OPC" rel="tag"&gt;OPC&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OPC+basics" rel="tag"&gt;OPC basics&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Open+Packaging+Conventions" rel="tag"&gt;Open Packaging Conventions&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ISO+29500" rel="tag"&gt;ISO 29500&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ECMA+376" rel="tag"&gt;ECMA 376&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;i&gt;If you're developer who creates or accesses data files (and who doesn't?), then this blog might be one for you to keep an eye on.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Welcome to the first installment of Microsoft Packaging Team blog!&lt;/p&gt;  &lt;p&gt;The Packaging team works in the Microsoft Windows Division to provide programming APIs that support the Open Packaging Conventions standard.&amp;#160; Open Packaging Conventions (&amp;quot;OPC&amp;quot;) is a new file technology documented by the &lt;a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008%28E%29.zip" mce_href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008%28E%29.zip"&gt;ISO/IEC 29500-2&lt;/a&gt; and &lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip"&gt;ECMA 376-2&lt;/a&gt; standards.&lt;/p&gt;  &lt;p&gt;Several members of the team worked on the original &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx"&gt;System.IO.Packaging&lt;/a&gt; APIs released for managed-code in .NET 3.0.&amp;#160; We're particularly excited now with the upcoming release of &lt;a href="http://www.microsoft.com/windows/windows-7/default.aspx" mce_href="http://www.microsoft.com/windows/windows-7/default.aspx"&gt;&lt;b&gt;Windows 7&lt;/b&gt;&lt;/a&gt; which will include new native-code &lt;a href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;Win32 Packaging&lt;/a&gt; APIs that will ship as part of the operating system!&amp;#160; Microsoft is strongly embracing open standards and interoperability - the commitment to incorporate OPC as an integral element of the operating system is another step in that direction.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 2px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Open Packaging Conventions" border="0" alt="Open Packacing Conventions" align="right" src="http://blogs.msdn.com/blogfiles/opc/WindowsLiveWriter/AdventuresinPackagingEpisode1_129C1/OpenPackaging_300x197_82dpi_8.png" width="280" height="184" /&gt;Perhaps an initial question might be, &lt;i&gt;&amp;quot;what is OPC and what makes it so compelling&amp;quot;?&amp;#160; &lt;/i&gt;Rather than being a specific file format, OPC is a &lt;i&gt;container-file technology&lt;/i&gt; that's designed to create file formats based on a flexible open framework.&amp;#160; OPC integrates elements of Zip, XML, and the Web into an open industry standard that makes it easier to organize, store, and transport application data.&amp;#160; OPC is the core file technology for many of the new file formats supported by Microsoft products.&amp;#160; This new generation of OPC-based files include Office 12 versions of &lt;a href="http://office.microsoft.com/word" mce_href="http://office.microsoft.com/word"&gt;Word&lt;/a&gt; (.docx), &lt;a href="http://office.microsoft.com/excel" mce_href="http://office.microsoft.com/excel"&gt;Excel&lt;/a&gt; (.xlsx), and &lt;a href="http://office.microsoft.com/powerpoint/" mce_href="http://office.microsoft.com/powerpoint/"&gt;PowerPoint&lt;/a&gt; (.pptx), along with &lt;a href="http://www.microsoft.com/whdc/xps/default.mspx" mce_href="http://www.microsoft.com/whdc/xps/default.mspx"&gt;XPS&lt;/a&gt; (.xps), &lt;a href="http://www.microsoft.com/learningspace/semblio/Default.aspx" mce_href="http://www.microsoft.com/learningspace/semblio/Default.aspx"&gt;Semblio&lt;/a&gt; (.semblio), plus a growing number of other new Microsoft and third-party applications such as Autodesk &lt;a href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;amp;id=2704278" mce_href="http://usa.autodesk.com/adsk/servlet/index?siteID=123112&amp;amp;id=2704278"&gt;AutoCAD&lt;/a&gt; (.dwfx) and Siemens &lt;a href="http://www.plm.automation.siemens.com/en_us/" mce_href="http://www.plm.automation.siemens.com/en_us/"&gt;UGS&lt;/a&gt; (.jtx).&amp;#160; While each of these file formats share OPC as a foundation, the data content contained in each differs depending on the specific format.&amp;#160; Before going too much further, perhaps a couple of words on terminology.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;In packaging terms...&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;A &amp;quot;&lt;i&gt;package&lt;/i&gt;&amp;quot; corresponds to a &amp;quot;Zip archive&amp;quot;. &lt;/li&gt;      &lt;li&gt;A &amp;quot;&lt;i&gt;part&lt;/i&gt;&amp;quot; corresponds to a &amp;quot;file&amp;quot; (i.e. &amp;quot;a data stream&amp;quot;) stored within the Zip. &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;ZipPackages      &lt;br /&gt;&lt;/b&gt;In using Zip as its physical container, &lt;i&gt;all&lt;/i&gt; OPC-based file formats are, in fact, Zip files.&amp;#160; You can simply append &amp;quot;.zip&amp;quot; to any OPC file (package) to open and examine its contents in Windows Explorer or your favorite Zip utility. This makes packages a great choice for organizing multiple application data streams into a single file that’s portable and easy to access.&amp;#160; It’s important to note, however, that while all OPC files are Zip files, the reverse is not necessarily true: &lt;i&gt;not all&lt;/i&gt; Zip files are OPC files.&amp;#160; OPC adds two requirements to a Zip file:&lt;/p&gt;  &lt;ol&gt;   &lt;ol&gt;     &lt;li&gt;The names of all of the parts (files) stored in an OPC package must be URI-compliant. &lt;/li&gt;      &lt;li&gt;The package must contain a “[Content_Types].xml” file. &lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;&lt;b&gt;URI Part Names      &lt;br /&gt;&lt;/b&gt;The first requirement*, &lt;a href="http://tools.ietf.org/html/rfc3986" mce_href="http://tools.ietf.org/html/rfc3986"&gt;URI&lt;/a&gt;-compliant part names, enables potential web-access to the parts stored in a package when the package is located on a web server.&amp;#160; In situations where an original filename is not URI-compliant, the filename is typically &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Percent_encoded" mce_href="http://en.wikipedia.org/wiki/Percent_encoded"&gt;percent-encoded&lt;/a&gt;&amp;quot; to a URI-compliant form.&amp;#160; For example, a part with the filename &amp;quot;my file.txt&amp;quot; would be percent-encoded as &amp;quot;my%20file.txt&amp;quot; (you've probably seen this in many of the URLs on your Web browser).     &lt;br /&gt;&lt;font size="1"&gt;*Re. &lt;/font&gt;&lt;a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008(E).zip" mce_href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008(E).zip"&gt;&lt;font size="1"&gt;ISO 29500-2&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;, Section 9.1.1 “Part Names”.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;The [Content_Types].xml Part      &lt;br /&gt;&lt;/b&gt;The second requirement**, a &amp;quot;[Content_Types].xml&amp;quot; part, is used so that the content of all the parts in the package are clearly and accurately defined, not only today but into the future.&amp;#160; Since many three or four characters filename extensions have multiple meanings, Content_Types is used to accurately define part content through the use of &lt;a href="http://www.webmaster-toolkit.com/mime-types.shtml" mce_href="http://www.webmaster-toolkit.com/mime-types.shtml"&gt;MIME-style&lt;/a&gt; &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7" mce_href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7"&gt;media types&lt;/a&gt;.&amp;#160; The markup within a Content_Types part is fairly simple and contains just two basic types of elements: &amp;quot;&lt;b&gt;Default&lt;/b&gt;&amp;quot; and &amp;quot;&lt;b&gt;Override&lt;/b&gt;&amp;quot; elements.&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;&lt;b&gt;Default: &lt;/b&gt;associates a generic file &amp;quot;Extension&amp;quot; to a specified &amp;quot;ContentType&amp;quot;. &lt;/li&gt;      &lt;li&gt;&lt;b&gt;Override:&lt;/b&gt; associates a specific &amp;quot;PartName&amp;quot; to a specified &amp;quot;ContentType&amp;quot;         &lt;br /&gt;(overrides any Default extension association). &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;The following is an example of a [Content_Types].xml part:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;        &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;lt;Types xmlns=&amp;quot;&lt;/font&gt;&lt;b&gt;&lt;font face="Courier New"&gt;http://schemas.openxmlformats.org/package/2006/content-types&lt;/font&gt;&lt;/b&gt;&lt;/a&gt;&lt;font face="Courier New"&gt;&amp;quot;&amp;gt;        &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160; &amp;lt;Default Extension=&amp;quot;&lt;b&gt;htm&lt;/b&gt;&amp;quot; ContentType=&amp;quot;&lt;b&gt;text/html&lt;/b&gt;&amp;quot; /&amp;gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160; &amp;lt;Default Extension=&amp;quot;&lt;b&gt;css&lt;/b&gt;&amp;quot; ContentType=&amp;quot;&lt;b&gt;text/css&lt;/b&gt;&amp;quot; /&amp;gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160; &amp;lt;Default Extension=&amp;quot;&lt;b&gt;png&lt;/b&gt;&amp;quot; ContentType=&amp;quot;&lt;b&gt;image/png&lt;/b&gt;&amp;quot; /&amp;gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160; &amp;lt;Default Extension=&amp;quot;&lt;b&gt;jpg&lt;/b&gt;&amp;quot; ContentType=&amp;quot;&lt;b&gt;image/jpeg&lt;/b&gt;&amp;quot; /&amp;gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160; &amp;lt;Default Extension=&amp;quot;&lt;b&gt;mp3&lt;/b&gt;&amp;quot; ContentType=&amp;quot;&lt;b&gt;audio/mpeg3&lt;/b&gt;&amp;quot; /&amp;gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160; &amp;lt;Default Extension=&amp;quot;&lt;b&gt;xml&lt;/b&gt;&amp;quot; ContentType=&amp;quot;&lt;b&gt;application/xml&lt;/b&gt;&amp;quot; /&amp;gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160; &amp;lt;Override PartName=&amp;quot;&lt;b&gt;/docProps/core.xml&lt;/b&gt;&amp;quot;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160; ContentType=&amp;quot;&lt;b&gt;application/vnd.openxmlformats-package.core-properties+xml&lt;/b&gt;&amp;quot; /&amp;gt;         &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&amp;lt;/Types&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;When using the &lt;a href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;Win32 native-code Packaging APIs&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx"&gt;.NET managed-code Packaging APIs&lt;/a&gt; the Content_Types file is created and managed automatically.&amp;#160; If you're creating a Zip package on your own you'll also need to include a [Content_Types].xml file that contains the markup to define the &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17" mce_href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17"&gt;content types&lt;/a&gt; for all of the parts contained in the package. As shown in the above example this is fairly simple to do.     &lt;br /&gt;&lt;font size="1"&gt;**Re. &lt;/font&gt;&lt;a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008(E).zip" mce_href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008(E).zip"&gt;&lt;font size="1"&gt;ISO 29500-2&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;, Section 9.1.2 “Content Types”.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;The Adventure Continues...      &lt;br /&gt;&lt;/b&gt;These are some basics to help get you started but there are many other additional services that OPC provides.&amp;#160; A goal of this blog will be to highlight uses and features of both the Win32 native-code &lt;a href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;Packaging&lt;/a&gt; and .NET managed-code &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx"&gt;System.IO.Packaging&lt;/a&gt; APIs for creating, organizing, and accessing information stored in OPC files.&amp;#160; We think you'll find the Open Packaging Conventions an exceptionally flexible standard for managing application data; and in particular, the packaging APIs an indispensable tool to help you take advantage of this new file technology - more to come in following episodes...&lt;/p&gt;  &lt;p&gt;Thanks for listening,    &lt;br /&gt;Jack&lt;/p&gt;  &lt;p&gt;PS: Here are some links for more information and related topics about Packaging:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Open Packaging Conventions (OPC) MSDN Forum &lt;/b&gt;&lt;i&gt;- New!&lt;/i&gt;&lt;i&gt;        &lt;br /&gt;&lt;/i&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-us/os_opc/threads/" mce_href="http://social.msdn.microsoft.com/Forums/en-us/os_opc/threads/"&gt;http://social.msdn.microsoft.com/Forums/en-us/os_opc/threads/        &lt;br /&gt;&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;OPC: A New Standard for Packaging Your Data&lt;/b&gt;       &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/08/OPC/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/07/08/OPC/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/07/08/OPC/default.aspx&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;The Addressing Model of the Open Packaging Conventions&lt;/b&gt;       &lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480199.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa480199.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa480199.aspx&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Office Extensibility / Open XML SDK blog&lt;/b&gt;       &lt;br /&gt;&lt;a href="http://blogs.msdn.com/brian_jones/" mce_href="http://blogs.msdn.com/brian_jones/"&gt;http://blogs.msdn.com/brian_jones/&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Win32 Native-Code: Data Access and Storage | Packaging&lt;/b&gt;       &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd371623.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd371623.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd371623.aspx&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;.NET Managed-Code: System.IO.Packaging&lt;/b&gt;       &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;ISO/IEC 29500-2: Open Packaging Conventions (2008)        &lt;br /&gt;&lt;/b&gt;&lt;a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008%28E%29.zip" mce_href="http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008%28E%29.zip"&gt;http://standards.iso.org/ittf/PubliclyAvailableStandards/c051459_ISOIEC%2029500-2_2008%28E%29.zip&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;ECMA 376-2: Open Packaging Conventions, 1st Edition (2006)        &lt;br /&gt;&lt;/b&gt;&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip"&gt;http://www.ecma-international.org/publications/files/ECMA-ST/Office%20Open%20XML%201st%20edition%20Part%202%20(PDF).zip&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;ECMA 376-2: Open Packaging Conventions, 2nd Edition (2008) &lt;/b&gt;(matches ISO)       &lt;br /&gt;&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-376,%20Second%20Edition,%20Part%202%20-%20Open%20Packaging%20Conventions.zip" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-376,%20Second%20Edition,%20Part%202%20-%20Open%20Packaging%20Conventions.zip"&gt;http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-376,%20Second%20Edition,%20Part%202%20-%20Open%20Packaging%20Conventions.zip&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;Here's a recent article and sample by Rich Quackenbush - the title says it all...      &lt;br /&gt;&lt;strong&gt;Using OPC to Store Your Own Data&lt;/strong&gt;&lt;a&gt;        &lt;br /&gt;&lt;/a&gt;&lt;a href="http://www.devx.com/dotnet/Article/41235" mce_href="http://www.devx.com/dotnet/Article/41235"&gt;http://www.devx.com/dotnet/Article/41235&lt;/a&gt;       &lt;br /&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;And here's a fun post by Matt Hamilton describing his use of packaging in his &lt;a href="http://comicster.net/" mce_href="http://comicster.net/"&gt;Comicster&lt;/a&gt; application.       &lt;br /&gt;&lt;b&gt;Zip Your Streams with System.IO.Packaging&lt;/b&gt;       &lt;br /&gt;&lt;a href="http://www.madprops.org/blog/zip-your-streams-with-system-io-packaging/" mce_href="http://www.madprops.org/blog/zip-your-streams-with-system-io-packaging/"&gt;http://www.madprops.org/blog/zip-your-streams-with-system-io-packaging/&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9624786" width="1" height="1"&gt;</description></item></channel></rss>