Пример #1
0
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))
Пример #2
0
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))
Пример #3
0
        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