def addtriples(graph, subject, ieuris, iod, de, ds): def gettagvalue(tag, vr): return getsinglevalue(ds, tag, vr) predicate = uritools.urifromtag(de.tag, gettagvalue=gettagvalue) currentsubject = subject if long(de.tag) in datadict: tagvm = datadict[long(de.tag)][1] else: tagvm = '1' # try to determine IE and change currentsubject accordingly ie = None if iod and de.tag in iesbyattribute: if iod in iesbyattribute[de.tag]: matches = iesbyattribute[de.tag][iod] else: # attribute is not used in this IOD, see if IE is unique anyway matches = iesbyattribute[de.tag][None] if len(matches) == 1: ie = matches[0] if ie not in ieuris: print >> sys.stderr, "IE", ie, "not in IOD for", iod ieuris[ie] = None currentsubject = ieuris[ie] if currentsubject is None: currentsubject = getieuri(graph, subject, ds, ie) ieuris[ie] = currentsubject if type(de.value) == dicom.sequence.Sequence: colist, dummy = generateuri() lastitem = None for de1 in de: listitem, dummy = generateuri() if lastitem: graph.add((lastitem, CO.nextItem, listitem)) else: graph.add((colist, CO.firstItem, listitem)) lastitem = listitem object, ieuris1, iod1 = datasetcontext(graph, de1) graph.add((colist, CO.item, listitem)) graph.add((listitem, CO.itemContent, object)) graph.add((listitem, RDF.type, CO.ListItem)) graph.add((listitem, RDFS.label, rdflib.Literal('List item'))) cl = uritools.urifromtag(de.tag, isclass=True, gettagvalue=gettagvalue) graph.add((object, RDF.type, cl)) for de2 in de1: addtriples(graph, object, ieuris1, iod1, de2, de1) if lastitem: graph.add((currentsubject, predicate, colist)) graph.add((colist, RDF.type, CO.List)) graph.add((colist, RDFS.label, rdflib.Literal('List'))) graph.add((colist, CO.lastItem, listitem)) elif type(de.value) in (dicom.multival.MultiValue, list) or tagvm != '1': vr = de.VR if type(de.value) not in (dicom.multival.MultiValue, list): de = [de.value] colist, dummy = generateuri() lastitem = None for de1 in de: object = tripleobject(vr, de1) if object is None: continue listitem, dummy = generateuri() if lastitem: graph.add((lastitem, CO.nextItem, listitem)) else: graph.add((colist, CO.firstItem, listitem)) lastitem = listitem graph.add((colist, CO.item, listitem)) graph.add((listitem, CO.itemContent, object)) graph.add((listitem, RDF.type, CO.ListItem)) graph.add((listitem, RDFS.label, rdflib.Literal('List item'))) if lastitem: graph.add((currentsubject, predicate, colist)) graph.add((colist, RDF.type, CO.List)) graph.add((colist, RDFS.label, rdflib.Literal('List'))) graph.add((colist, CO.lastItem, listitem)) else: assert de.VM == 1, describedataelement(de) object = tripleobject(de.VR, de.value) if object is not None: extratriples(graph, currentsubject, de, ie) graph.add((currentsubject, predicate, object))
def addtriples(graph,subject,ieuris,iod,de,ds): def gettagvalue(tag,vr): return getsinglevalue(ds,tag,vr) predicate=uritools.urifromtag(de.tag,gettagvalue=gettagvalue) currentsubject=subject if long(de.tag) in datadict: tagvm=datadict[long(de.tag)][1] else: tagvm='1' # try to determine IE and change currentsubject accordingly ie=None if iod and de.tag in iesbyattribute: if iod in iesbyattribute[de.tag]: matches=iesbyattribute[de.tag][iod] else: # attribute is not used in this IOD, see if IE is unique anyway matches=iesbyattribute[de.tag][None] if len(matches)==1: ie=matches[0] if ie not in ieuris: print >> sys.stderr,"IE",ie,"not in IOD for",iod ieuris[ie]=None currentsubject=ieuris[ie] if currentsubject is None: currentsubject=getieuri(graph,subject,ds,ie) ieuris[ie]=currentsubject if type(de.value)==dicom.sequence.Sequence: colist,dummy=generateuri() lastitem=None for de1 in de: listitem,dummy=generateuri() if lastitem: graph.add((lastitem,CO.nextItem,listitem)) else: graph.add((colist,CO.firstItem,listitem)) lastitem=listitem object,ieuris1,iod1=datasetcontext(graph,de1) graph.add((colist,CO.item,listitem)) graph.add((listitem,CO.itemContent,object)) graph.add((listitem,RDF.type,CO.ListItem)) graph.add((listitem,RDFS.label,rdflib.Literal('List item'))) cl=uritools.urifromtag(de.tag,isclass=True,gettagvalue=gettagvalue) graph.add((object,RDF.type,cl)) for de2 in de1: addtriples(graph,object,ieuris1,iod1,de2,de1) if lastitem: graph.add((currentsubject,predicate,colist)) graph.add((colist,RDF.type,CO.List)) graph.add((colist,RDFS.label,rdflib.Literal('List'))) graph.add((colist,CO.lastItem,listitem)) elif type(de.value) in (dicom.multival.MultiValue,list) or tagvm!='1': vr=de.VR if type(de.value) not in (dicom.multival.MultiValue,list): de=[de.value] colist,dummy=generateuri() lastitem=None for de1 in de: object=tripleobject(vr,de1) if object is None: continue listitem,dummy=generateuri() if lastitem: graph.add((lastitem,CO.nextItem,listitem)) else: graph.add((colist,CO.firstItem,listitem)) lastitem=listitem graph.add((colist,CO.item,listitem)) graph.add((listitem,CO.itemContent,object)) graph.add((listitem,RDF.type,CO.ListItem)) graph.add((listitem,RDFS.label,rdflib.Literal('List item'))) if lastitem: graph.add((currentsubject,predicate,colist)) graph.add((colist,RDF.type,CO.List)) graph.add((colist,RDFS.label,rdflib.Literal('List'))) graph.add((colist,CO.lastItem,listitem)) else: assert de.VM==1,describedataelement(de) object=tripleobject(de.VR,de.value) if object is not None: extratriples(graph,currentsubject,de,ie) graph.add((currentsubject,predicate,object))
s1=s.replace(' rdf:nodeID="'+nodeid+'"','',1) if nodeid not in s1: s=s1 pos-=13 pos=s.find(' rdf:nodeID="',pos) return s graph=uritools.newgraph() for tag,(vr,vm,label,restricted,name) in datadict.items(): if not name: continue if vr=='NONE': continue assert label s1=uritools.urifromtag(tag) s2=uritools.urifromtag(tag,numeric=True) for subject,subject1 in [(s1,s2),(s2,s1)]: graph.add((subject,OWL.equivalentProperty,subject1)) graph.add((subject,RDFS.isDefinedBy,settings.ontodoc)) graph.add((subject,RDFS.label,rdflib.Literal(label))) range=None if vr=='SQ' or vm!='1': cl=OWL.ObjectProperty range=CO.List elif vr in ('UI','OB','OW','OB or OW','OW or OB'): cl=OWL.ObjectProperty