Example #1
0
static PointerArray *getNodesMatchingXPath(xmlNode *node, xmlChar *path) {
    if (!path)
        return NULL;

	xmlXPathObject *results_set;
	PointerArray *results_array;
	xmlNode *result_node;
	int n;
	
	// get results
    if (node)
        CONTEXT->node = node;
	results_set = xmlXPathEvalExpression(path, CONTEXT);
	if (!results_set)
		return NULL;
	
	// put them in the array
	results_array = createPointerArray();
	if (results_set->nodesetval && results_set->nodesetval->nodeNr > 0) {
		for (n=0; n < results_set->nodesetval->nodeNr; n++) {
			result_node = results_set->nodesetval->nodeTab[n];
			insertPointerIntoArray(results_array, result_node);
		}
	}
	
	// finish up
	xmlXPathFreeObject(results_set);
	CONTEXT->node = NULL;
	return results_array;
}
Example #2
0
SBOLObject* createSBOLObject(Document* doc, const char* uri) {
	if (!doc || !uri || isSBOLObjectURI(doc, uri))
		return NULL;
	SBOLObject* obj = malloc(sizeof(SBOLObject));
	obj->uri = createURIProperty(doc);
	obj->xml_annotations = createPointerArray();
	setSBOLObjectURI(obj, uri);
	return obj;
}
Example #3
0
Collection* createCollection(Document* doc, const char* uri) {
	if (!doc || !uri || isSBOLObjectURI(doc, uri))
	    return NULL;
	Collection* col  = malloc(sizeof(Collection));
	col->doc         = doc;
	col->base        = createSBOLCompoundObject(doc, uri);
	col->components  = createPointerArray();
	registerCollection(col);
	return col;
}
SequenceAnnotation* createSequenceAnnotation(Document* doc, const char* uri) {
	if (!doc || !uri || isSBOLObjectURI(doc, uri))
	    return NULL;
	SequenceAnnotation* ann = malloc(sizeof(SequenceAnnotation));
	ann->doc          = doc;
	ann->base         = createSBOLObject(doc, uri);
	ann->genbankStart = createPositionProperty();
	ann->genbankEnd   = createPositionProperty();
	//ann->strand       = 1;
	ann->strand       = createPolarityProperty();
	ann->subComponent = NULL;
	ann->precedes = createPointerArray();
	registerSequenceAnnotation(ann);
	return ann;
}
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;
}
Example #6
0
static void resetProcessed() {
	deletePointerArray(PROCESSED);
	PROCESSED = createPointerArray();
}