|
An Information Portal to Biological Macromolecular Structures |
||
|
PDB Home |
Contact Us |
Software Tools Home | Dictionary Home | PDBML Home | PDBML2CIF Home | |
----------------PDBML2CIF Library Usage Examples-------------
1. Reading the content of a PDBML file and accessing its data
2. Reading the content of a PDBML file and writing out a CIF file
#include <string>
#include <util/PlatformUtils.hpp>
#include <util/TransService.hpp>
#include <sax2/XMLReaderFactory.hpp>
#include "CifFile.h"
#include "CifLoadReorganizer.h"
#include "misc_util.h"
#include "PdbMlParserHandler.h"
using namespace std;
XERCES_CPP_NAMESPACE_USE
// The (absolute or relative) name of the PDBML file should be
// stored in xmlFileName
string xmlFileName;
// The (absolute or relative) name of the CIF file should be
// stored in cifFileName
string cifFileName;
// The name of block
string blockName;
// The name of table
string tableName;
/*
** Example 1: How to read the content of a PDML file.
*/
// Initialize the XML parser platform
try
{
XMLPlatformUtils::Initialize();
}
catch (const XMLException& toCatch)
{
// Initialization exception ocurred. Report the error and exit.
string err("Error in PdbMlParser [main() method]: Error during"\
" SAX2 initialization! :\n");
err += toString(toCatch.getMessage());
err += ".\n\n";
Error(err);
return(-1);
}
// Create the XML reader
SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
// Initialize number of errors
int errorCount = 0;
// Create CIF file object.
// Note that this is only an in-memory object, which will not be
// serialized to its binary file equivalent. Therefore, the second
// argument ("virtual"), which would normally indicate the name of the
// serialized binary file, is not used at all.
CifFile cifFile(VIRTUAL_MODE, "virtual");
try
{
// Have the XML reader store data in the created CIF file object
PdbMlParserHandler tHandler(cifFile);
// Set content and error handlers in XML reader
parser->setContentHandler(&tHandler);
parser->setErrorHandler(&tHandler);
// Parse the PDBML file
parser->parse(xmlFileName.c_str());
errorCount = parser->getErrorCount();
}
catch (const XMLException& toCatch)
{
// PDBML parsing exception. Report error and terminate
string err("Error in PdbMlParser [main() method]: A SAX2 error"\
" occurred:\n");
err += toString(toCatch.getMessage());
err += ".\n\n";
Error(err);
XMLPlatformUtils::Terminate();
return(-1);
}
// XML parsing is successfull. Delete the parser and de-initialize the
// XML parser platform.
delete parser;
XMLPlatformUtils::Terminate();
// Accessing the data in the CIF file object
// Example of printing out a table in a block.
Block& block = cifFile.GetBlock(blockName);
ISTable* isTableP = block.GetTablePtr(tableName);
cout << (*isTableP) << endl;
/*
** Example 2: How to convert PDBML to CIF
*/
// Writing out a CIF file
// Note that this is now conversion from PDBML format to CIF format
cifFile.Write(cifFileName);