void printSequenceAnnotation(const SequenceAnnotation* ann, int tabs) { if (!ann) return; indent(tabs); printf("%s\n", getSequenceAnnotationURI(ann)); //int start = ann->genbankStart; int start = getSequenceAnnotationStart(ann); //int end = ann->genbankEnd; int end = getSequenceAnnotationEnd(ann); if (start != -1 || end != -1) { /// @todo is 0 valid? indent(tabs+1); printf("%i --> %i\n", start, end); } char strand = polarityToChar( getPolarityProperty(ann->strand) ); indent(tabs+1); printf("strand: %c\n", strand); if (ann->subComponent) { indent(tabs+1); printf("subComponent: %s\n", getDNAComponentURI(ann->subComponent)); } int num = getNumPrecedes(ann); if (num > 0) { indent(tabs+1); printf("%i precedes:\n", num); int i; for (i=0; i<num; i++) { indent(tabs+2); printf("%s\n", getSequenceAnnotationURI(getNthPrecedes(ann, i))); } } }
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); }
void printCollection(const Collection* col, int tabs) { if (!col) return; indent(tabs); printf("%s\n", getCollectionURI(col)); indent(tabs+1); printf("name: %s\n", getCollectionName(col)); indent(tabs+1); printf("description: %s\n", getCollectionDescription(col)); int i; int num; if (col->components) { DNAComponent* com; num = getNumDNAComponentsIn(col); if (num > 0) { indent(tabs+1); printf("%i components:\n", num); for (i=0; i<num; i++) { com = getNthDNAComponentIn(col, i); indent(tabs+2); printf("%s\n", getDNAComponentURI(com)); } } } }
SequenceAnnotation* copySequenceAnnotation(SequenceAnnotation* ann, char* id_modifier) { int i; char* copy_uri = augmentURI(getSequenceAnnotationURI(ann), id_modifier); SequenceAnnotation* copy = createSequenceAnnotation(ann->doc, copy_uri); setSequenceAnnotationStart(copy, getSequenceAnnotationStart(ann)); setSequenceAnnotationEnd(copy, getSequenceAnnotationEnd(ann)); setSequenceAnnotationStrand(copy, getSequenceAnnotationStrand(ann)); // Copy precedes property copy->precedes = createPointerArray(); char *target_uri; for (i = 0; i < getNumPointersInArray(ann->precedes); i++) { target_uri = (char *)getNthPointerInArray(ann->precedes, i); insertPointerIntoArray(copy->precedes, augmentURI(target_uri, id_modifier)); } // Copy SubComponent tree recursively if (ann->subComponent) { char* sub_com_uri = augmentURI(getDNAComponentURI(ann->subComponent), id_modifier); DNAComponent* sub_com_copy = createDNAComponent(ann->doc, sub_com_uri); setSequenceAnnotationSubComponent(copy, sub_com_copy); } return (SequenceAnnotation *)copy; }
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); }