def processRdf()

in OpenCalaisAnnotatorGroovy/src/main/groovy/org/apache/uima/annotator/calais_groovy/RdfProcessor.groovy [45:107]


  def processRdf(rdfTextInstance, jcas) {
    // 4 passes
    // pass 1 - create url to node map
    // pass 2 - create entities
    // pass 3 - create relations (point to entities)
    // pass 4 - create instances of entities and relations - 
    //          ref entities and relations, and have begin/end refs to text
 
    // pass 2, 3, and 4 blended and done in 1 iteration.  
    def rdf = new XmlSlurper().parseText(rdfTextInstance.rdfText)
    // pass 1
    
    descriptionMap = [ : ]   
    rdf.Description.each {descriptionMap.put(it.@about.toString(), it)}

    if (debugPrint >= 3) { 
      descriptionMap.each {k, v -> println "key = $k,  value=$v"}
    }
    // pass 2, 3 and 4 blended
    entityMap = [ : ]  // key = url for entity, value = featureStructure for it
    instances = []
    
    relationMap = [ : ] 
    
    rdf.Description.each {
      def typeurl = it.type[0].@resource
      if (isEntity(typeurl)) {
        getOrMakeEntity(it.@about.toString(), jcas)
      } else if (isRelation(typeurl)) {
        getOrMakeRelation(it.@about.toString(), jcas)
      } else if (isInstance(typeurl)) {
        def entityOrRelation = descriptionMap.get(it.subject[0].@resource.toString())
        def is_entity = isEntity(entityOrRelation.type[0].@resource)
        def kind = is_entity ? 'Entity' : 'Relation'
        def instance = newJCasInstance(jcas, "${kind}Instance")
        instances.add(instance)
        if (is_entity) {
          instance.entity = getOrMakeEntity(entityOrRelation.@about.toString(), jcas)
        } else {
          instance.relation = getOrMakeRelation(entityOrRelation.@about.toString(), jcas)
        }
        instance.begin = Integer.valueOf(it.offset[0].text())
        instance.end =   Integer.valueOf(it.offset[0].text()) + Integer.valueOf(it.length[0].text())    
        instance.addToIndexes()
      }
    }


    if (debugPrint >= 2) {
      entityMap.each{k, v -> println "entity key = $k,  value=$v"} // test-debug
    }
   
    if (debugPrint >= 2) {
      relationMap.each {k, v -> println "relation: k: $k, v: $v"}  // debug test
    }
           
    if (debugPrint >= 1) {
      instances.each {println "instance $it"}
    }
    
    descriptionMap = entityMap = relationMap = instances = null

  }