static void writeDNAComponent(DNAComponent* com) { if (!com) return; xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_DNACOMPONENT)); if (!alreadyProcessed((void *)com)) { markProcessed((void *)com); xmlTextWriterWriteAttribute(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_ABOUT), xmlCharStrdup(getDNAComponentURI(com))); // properties char* data; data = getDNAComponentDisplayID(com); if (data) xmlTextWriterWriteElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_DISPLAYID), xmlCharStrdup(data)); data = getDNAComponentName(com); if (data) xmlTextWriterWriteElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_NAME), xmlCharStrdup(data)); data = getDNAComponentDescription(com); if (data) xmlTextWriterWriteElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_DESCRIPTION), xmlCharStrdup(data)); data = getDNAComponentType(com); if (data) { xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_TYPE)); xmlTextWriterWriteAttribute(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_RESOURCE), xmlCharStrdup(data)); xmlTextWriterEndElement(WRITER); } // sequence if (com->dnaSequence) { xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_DNASEQUENCE_REF)); indentMore(); /// @todo sometimes no contents? writeDNASequence(com->dnaSequence); markProcessed(com->dnaSequence); indentLess(); xmlTextWriterEndElement(WRITER); } // annotations int n; int num = getNumSequenceAnnotationsFor(com); SequenceAnnotation* ann; indentMore(); if (num>0) { for (n=0; n<num; n++) { ann = getNthSequenceAnnotationFor(com, n); indentMore(); xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_ANNOTATION)); writeSequenceAnnotation(ann); xmlTextWriterEndElement(WRITER); indentLess(); } } indentLess(); } else xmlTextWriterWriteAttribute(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_RESOURCE), xmlCharStrdup(getDNAComponentURI(com))); xmlTextWriterEndElement(WRITER); }
void ExportContext::endElement() { if(!m_objectStack.size()) { reportError("endElement(): no object being written.\n"); return; } ASSERT(m_elementStack.size()); element_entry& entry = m_elementStack.back(); if(m_state != WRITE_END && m_state != WRITE_CONTENT) { reportError("endElement(): not allowed.\n"); return; } indentLess(); BString out; // write closing tag if(!entry.hasContent) out << "/>"; else out << "\n" << indentString() << "</" << entry.name.String() << ">"; writeString(out); // pop element off stack m_elementStack.pop_back(); }
static void writeSequenceAnnotation(SequenceAnnotation* ann) { if (!ann) return; markProcessed((void *)ann); xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_SEQUENCEANNOTATION)); xmlTextWriterWriteAttribute(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_ABOUT), xmlCharStrdup(getSequenceAnnotationURI(ann))); // precedes int n; SequenceAnnotation* ann2; indentMore(); for (n=0; n<getNumPrecedes(ann); n++) { ann2 = getNthPrecedes(ann, n); xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_PRECEDES)); xmlTextWriterWriteAttribute(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_RESOURCE), xmlCharStrdup(getSequenceAnnotationURI(ann2))); xmlTextWriterEndElement(WRITER); } indentLess(); // start, end int start = getSequenceAnnotationStart(ann); int end = getSequenceAnnotationEnd(ann); if (start>0) xmlTextWriterWriteElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_BIOSTART), xmlCharStrdup(intToStr(start))); if (end>0) xmlTextWriterWriteElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_BIOEND), xmlCharStrdup(intToStr(end))); // subComponent char* uri; indentMore(); if (ann->subComponent) { uri = getDNAComponentURI(ann->subComponent); xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_SUBCOMPONENT)); if (alreadyProcessed((void *)(ann->subComponent))) xmlTextWriterWriteAttribute(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_RESOURCE), xmlCharStrdup(uri)); else { indentMore(); writeDNAComponent(ann->subComponent); indentLess(); } xmlTextWriterEndElement(WRITER); } indentLess(); xmlTextWriterEndElement(WRITER); }
static void writeCollection(Collection* col) { if (!col) return; xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_COLLECTION)); if (!alreadyProcessed((void *)col)) { markProcessed((void *)col); int n; int num; // properties if (getCollectionURI(col)) xmlTextWriterWriteAttribute(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_ABOUT), xmlCharStrdup(getCollectionURI(col))); if(getCollectionDisplayID(col)) xmlTextWriterWriteElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_DISPLAYID), xmlCharStrdup(getCollectionDisplayID(col))); if (getCollectionName(col)) xmlTextWriterWriteElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_NAME), xmlCharStrdup(getCollectionName(col))); if (getCollectionDescription(col)) xmlTextWriterWriteElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_DESCRIPTION), xmlCharStrdup(getCollectionDescription(col))); // components DNAComponent* com; num = getNumDNAComponentsIn(col); if (num>0) { indentMore(); for (n=0; n<num; n++) { xmlTextWriterStartElement(WRITER, xmlCharStrdup(NSPREFIX_SBOL ":" NODENAME_COMPONENT)); com = getNthDNAComponentIn(col, n); indentMore(); writeDNAComponent(com); indentLess(); xmlTextWriterEndElement(WRITER); } indentLess(); } } else xmlTextWriterWriteAttribute(WRITER, xmlCharStrdup(NSPREFIX_RDF ":" NODENAME_RESOURCE), xmlCharStrdup(getCollectionURI(col))); xmlTextWriterEndElement(WRITER); }
static void endSBOLDocument() { indentLess(); xmlTextWriterEndElement(WRITER); xmlTextWriterEndDocument(WRITER); }