This paper describes PI/OT, a template-based parallel I/O system. In PI/OT, I/O streams have annotations associated with them that are external to the source code. These annotations specify an I/O behavior (template) and some modifiers (attributes). This paper shows how PI/OT attributes can be used to handle irregular data structures, and how the templates can be hierarchically composed to support complex I/O access patterns. PI/OT's separation of I/O specifications from the source code allows users to create these parallel I/O behaviors quickly and correctly. We demonstrate these capabilities by describing how PI/OT can be used to implement a biochemistry application and by discussing the performance results.