1

我是流口水使用的新手,我有一个小问题。我有如下地图,我使用 schemaJson2Pojo java api 创建了 pojo:

{
"svo": [
      {
        "clause": "Sunanda Pushkar died of poisoning",
        "svoMetadata": {
          "person": "sunanda pushkar",
          "subjectType": "person_coref"
        },
        "objectPOS": "IN VBG;",
        "isRelatedKeySVO": false,
        "subjectPOS": " NNP NNP",
        "subject": "Sunanda Pushkar",
        "confidence": 0.9266232318014763,
        "verb": "died",
        "verbPOS": "VBN",
        "source": "OpenIE",
        "isKeySVO": true,
        "object": "of poisoning;"
      }]
}

注意:svo.svoMetadata 有人名

因此,在使用 schemaJson2Pojo api 时,会生成以下类:

class RootDoc
{
 private List<Svo> svo = new ArrayList<Svo>();

 public List<Svo> getSvo() {
        return svo;
    }


    public void setSvo(List<Svo> svo) {
        this.svo = svo;
    }
}

class Svo
{
  private SvoMetadata svoMetadata;

public SvoMetadata getSvoMetadata() {
        return svoMetadata;
    }


    public void setSvoMetadata(SvoMetadata svoMetadata) {
        this.svoMetadata = svoMetadata;
    }
}

class SvoMetadata
{
     private String person;

    public void setPerson(String person) {
        this.person = person;
    }

    public SvoMetadata withPerson(String person) {
        this.person = person;
        return this;
    }

}

我将 RootDoc 转发给 drl,我正在尝试获取一个“svoMetadata”实例,如下所示,希望更新 drl RHS 中的人员:

drl中的规则如下:

when 
        $mastermap : EsRootDoc($svolist:svo)
    $svo : Svo($svoMetadata2 : svoMetadata) from $svolist
         // $svoMetadata: SvoMetadata($t: $svo.getSvoMetadata())  // this gives me error 
then 
       $svoMetadata.setPerson("taranTaran");  // how do i get SvoMetadata instance to perform setPerson method????

我如何让 SvoMetadata 实例执行 setPerson 方法????

4

1 回答 1

0

对于其他人,他们可能正在寻找上述 NPE 问题的 drl 语法。

    $mastermap : EsRootDoc($svolist:svo)
    $svo : Svo($svoMetadata2 : svoMetadata!=null,svoMetadata.person!=null) from $svolist 

检查 svoMetadata!=null 解决了这个问题。

于 2017-06-06T09:53:11.697 回答