mirror of
https://github.com/OpenSPG/openspg.git
synced 2025-09-02 05:14:35 +00:00
feat(reasoner): init openspg catalog (#34)
This commit is contained in:
parent
4f44be6313
commit
1b6d45d8a5
74
reasoner/catalog/openspg-catalog/pom.xml
Normal file
74
reasoner/catalog/openspg-catalog/pom.xml
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
~
|
||||||
|
~ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License. You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
~ is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
~ or implied.
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.antgroup.openspg.reasoner</groupId>
|
||||||
|
<artifactId>reasoner-parent</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>reasoner-openspg-catalog</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.antgroup.openspg.reasoner</groupId>
|
||||||
|
<artifactId>reasoner-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.antgroup.openspg.reasoner</groupId>
|
||||||
|
<artifactId>reasoner-lube-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.antgroup.openspg.reasoner</groupId>
|
||||||
|
<artifactId>reasoner-kgdsl-parser</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-collections4</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpclient</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.hadoop</groupId>
|
||||||
|
<artifactId>hadoop-common</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.antgroup.openspg.server</groupId>
|
||||||
|
<artifactId>api-http-client</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.antgroup.openspg.server</groupId>
|
||||||
|
<artifactId>core-schema-model</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl.struct;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ConceptRule {
|
||||||
|
@JSONField(name = "relation")
|
||||||
|
private String relation;
|
||||||
|
|
||||||
|
@JSONField(name = "objectMetaType")
|
||||||
|
private String objectMetaType;
|
||||||
|
|
||||||
|
@JSONField(name = "objectConcept")
|
||||||
|
private String objectConcept;
|
||||||
|
|
||||||
|
@JSONField(name = "dsl")
|
||||||
|
private String dsl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property relation.
|
||||||
|
*
|
||||||
|
* @return property value of relation
|
||||||
|
*/
|
||||||
|
public String getRelation() {
|
||||||
|
return relation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property relation.
|
||||||
|
*
|
||||||
|
* @param relation value to be assigned to property relation
|
||||||
|
*/
|
||||||
|
public void setRelation(String relation) {
|
||||||
|
this.relation = relation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property objectMetaType.
|
||||||
|
*
|
||||||
|
* @return property value of objectMetaType
|
||||||
|
*/
|
||||||
|
public String getObjectMetaType() {
|
||||||
|
return objectMetaType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property objectMetaType.
|
||||||
|
*
|
||||||
|
* @param objectMetaType value to be assigned to property objectMetaType
|
||||||
|
*/
|
||||||
|
public void setObjectMetaType(String objectMetaType) {
|
||||||
|
this.objectMetaType = objectMetaType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property objectConcept.
|
||||||
|
*
|
||||||
|
* @return property value of objectConcept
|
||||||
|
*/
|
||||||
|
public String getObjectConcept() {
|
||||||
|
return objectConcept;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property objectConcept.
|
||||||
|
*
|
||||||
|
* @param objectConcept value to be assigned to property objectConcept
|
||||||
|
*/
|
||||||
|
public void setObjectConcept(String objectConcept) {
|
||||||
|
this.objectConcept = objectConcept;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property dsl.
|
||||||
|
*
|
||||||
|
* @return property value of dsl
|
||||||
|
*/
|
||||||
|
public String getDsl() {
|
||||||
|
return dsl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property dsl.
|
||||||
|
*
|
||||||
|
* @param dsl value to be assigned to property dsl
|
||||||
|
*/
|
||||||
|
public void setDsl(String dsl) {
|
||||||
|
this.dsl = dsl;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl.struct;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PropertyMeta {
|
||||||
|
@JSONField(name = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@JSONField(name = "name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@JSONField(name = "attrRangeDetail")
|
||||||
|
private PropertyRangeDetail propRange;
|
||||||
|
|
||||||
|
@JSONField(name = "propertyCategoryEnum")
|
||||||
|
private String category;
|
||||||
|
|
||||||
|
@JSONField(name = "spreadable")
|
||||||
|
private boolean spreadable;
|
||||||
|
|
||||||
|
@JSONField(name = "transformerDetail")
|
||||||
|
private TransformerDetail transformerDetail;
|
||||||
|
|
||||||
|
@JSONField(name = "logicRule")
|
||||||
|
private Rule logicRule;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property logicalRule.
|
||||||
|
*
|
||||||
|
* @return property value of logicalRule
|
||||||
|
*/
|
||||||
|
public Rule getLogicRule() {
|
||||||
|
return logicRule;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property logicalRule.
|
||||||
|
*
|
||||||
|
* @param logicRule value to be assigned to property logicalRule
|
||||||
|
*/
|
||||||
|
public void setLogicRule(Rule logicRule) {
|
||||||
|
this.logicRule = logicRule;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property name.
|
||||||
|
*
|
||||||
|
* @return property value of name
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property name.
|
||||||
|
*
|
||||||
|
* @param name value to be assigned to property name
|
||||||
|
*/
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property propRange.
|
||||||
|
*
|
||||||
|
* @return property value of propRange
|
||||||
|
*/
|
||||||
|
public PropertyRangeDetail getPropRange() {
|
||||||
|
return propRange;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property propRange.
|
||||||
|
*
|
||||||
|
* @param propRange value to be assigned to property propRange
|
||||||
|
*/
|
||||||
|
public void setPropRange(PropertyRangeDetail propRange) {
|
||||||
|
this.propRange = propRange;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property category.
|
||||||
|
*
|
||||||
|
* @return property value of category
|
||||||
|
*/
|
||||||
|
public String getCategory() {
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property category.
|
||||||
|
*
|
||||||
|
* @param category value to be assigned to property category
|
||||||
|
*/
|
||||||
|
public void setCategory(String category) {
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSpreadable() {
|
||||||
|
return spreadable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property spreadable.
|
||||||
|
*
|
||||||
|
* @param spreadable value to be assigned to property spreadable
|
||||||
|
*/
|
||||||
|
public void setSpreadable(boolean spreadable) {
|
||||||
|
this.spreadable = spreadable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property transformerDetail.
|
||||||
|
*
|
||||||
|
* @return property value of transformerDetail
|
||||||
|
*/
|
||||||
|
public TransformerDetail getTransformerDetail() {
|
||||||
|
return transformerDetail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property transformerDetail.
|
||||||
|
*
|
||||||
|
* @param transformerDetail value to be assigned to property transformerDetail
|
||||||
|
*/
|
||||||
|
public void setTransformerDetail(TransformerDetail transformerDetail) {
|
||||||
|
this.transformerDetail = transformerDetail;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl.struct;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PropertyRangeDetail {
|
||||||
|
@JSONField(name = "id")
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
@JSONField(name = "rangeEntityName")
|
||||||
|
private String rangeEntityName;
|
||||||
|
|
||||||
|
@JSONField(name = "attrRangeTypeEnumCode")
|
||||||
|
private String attrRangeTypeEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property rangeEntityName.
|
||||||
|
*
|
||||||
|
* @return property value of rangeEntityName
|
||||||
|
*/
|
||||||
|
public String getRangeEntityName() {
|
||||||
|
return rangeEntityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property attrRangeTypeEnum.
|
||||||
|
*
|
||||||
|
* @return property value of attrRangeTypeEnum
|
||||||
|
*/
|
||||||
|
public String getAttrRangeTypeEnum() {
|
||||||
|
return attrRangeTypeEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property attrRangeTypeEnum.
|
||||||
|
*
|
||||||
|
* @param attrRangeTypeEnum value to be assigned to property attrRangeTypeEnum
|
||||||
|
*/
|
||||||
|
public void setAttrRangeTypeEnum(String attrRangeTypeEnum) {
|
||||||
|
this.attrRangeTypeEnum = attrRangeTypeEnum;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,159 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl.struct;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class RelationTypeDetail {
|
||||||
|
@JSONField(name = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@JSONField(name = "name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@JSONField(name = "startEntityTypeDetail")
|
||||||
|
private VertexMeta startEntityType;
|
||||||
|
|
||||||
|
@JSONField(name = "endEntityTypeDetail")
|
||||||
|
private VertexMeta endEntityType;
|
||||||
|
|
||||||
|
@JSONField(name = "attributeTypeDetailList")
|
||||||
|
private List<PropertyMeta> attributeTypeDetailList;
|
||||||
|
|
||||||
|
@JSONField(name = "relationDirectionEnumCode")
|
||||||
|
private String relationDirectionEnum;
|
||||||
|
|
||||||
|
@JSONField(name = "logicRule")
|
||||||
|
private Rule logicRule;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property logicalRule.
|
||||||
|
*
|
||||||
|
* @return property value of logicalRule
|
||||||
|
*/
|
||||||
|
public Rule getLogicRule() {
|
||||||
|
return logicRule;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property logicalRule.
|
||||||
|
*
|
||||||
|
* @param logicRule value to be assigned to property logicalRule
|
||||||
|
*/
|
||||||
|
public void setLogicRule(Rule logicRule) {
|
||||||
|
this.logicRule = logicRule;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property name.
|
||||||
|
*
|
||||||
|
* @return property value of name
|
||||||
|
*/
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property name.
|
||||||
|
*
|
||||||
|
* @return property value of name
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property name.
|
||||||
|
*
|
||||||
|
* @param name value to be assigned to property name
|
||||||
|
*/
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property startEntityType.
|
||||||
|
*
|
||||||
|
* @return property value of startEntityType
|
||||||
|
*/
|
||||||
|
public VertexMeta getStartEntityType() {
|
||||||
|
return startEntityType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property startEntityType.
|
||||||
|
*
|
||||||
|
* @param startEntityType value to be assigned to property startEntityType
|
||||||
|
*/
|
||||||
|
public void setStartEntityType(VertexMeta startEntityType) {
|
||||||
|
this.startEntityType = startEntityType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property endEntityType.
|
||||||
|
*
|
||||||
|
* @return property value of endEntityType
|
||||||
|
*/
|
||||||
|
public VertexMeta getEndEntityType() {
|
||||||
|
return endEntityType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property endEntityType.
|
||||||
|
*
|
||||||
|
* @param endEntityType value to be assigned to property endEntityType
|
||||||
|
*/
|
||||||
|
public void setEndEntityType(VertexMeta endEntityType) {
|
||||||
|
this.endEntityType = endEntityType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property attributeTypeDetailList.
|
||||||
|
*
|
||||||
|
* @return property value of attributeTypeDetailList
|
||||||
|
*/
|
||||||
|
public List<PropertyMeta> getAttributeTypeDetailList() {
|
||||||
|
return attributeTypeDetailList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property attributeTypeDetailList.
|
||||||
|
*
|
||||||
|
* @param attributeTypeDetailList value to be assigned to property attributeTypeDetailList
|
||||||
|
*/
|
||||||
|
public void setAttributeTypeDetailList(List<PropertyMeta> attributeTypeDetailList) {
|
||||||
|
this.attributeTypeDetailList = attributeTypeDetailList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property relationDirectionEnum.
|
||||||
|
*
|
||||||
|
* @return property value of relationDirectionEnum
|
||||||
|
*/
|
||||||
|
public String getRelationDirectionEnum() {
|
||||||
|
return relationDirectionEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property relationDirectionEnum.
|
||||||
|
*
|
||||||
|
* @param relationDirectionEnum value to be assigned to property relationDirectionEnum
|
||||||
|
*/
|
||||||
|
public void setRelationDirectionEnum(String relationDirectionEnum) {
|
||||||
|
this.relationDirectionEnum = relationDirectionEnum;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl.struct;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Rule {
|
||||||
|
@JSONField(name = "ruleId")
|
||||||
|
private String ruleId;
|
||||||
|
|
||||||
|
@JSONField(name = "ruleContent")
|
||||||
|
private String ruleContent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property ruleId.
|
||||||
|
*
|
||||||
|
* @return property value of ruleId
|
||||||
|
*/
|
||||||
|
public String getRuleId() {
|
||||||
|
return ruleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property ruleId.
|
||||||
|
*
|
||||||
|
* @param ruleId value to be assigned to property ruleId
|
||||||
|
*/
|
||||||
|
public void setRuleId(String ruleId) {
|
||||||
|
this.ruleId = ruleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property ruleContent.
|
||||||
|
*
|
||||||
|
* @return property value of ruleContent
|
||||||
|
*/
|
||||||
|
public String getRuleContent() {
|
||||||
|
return ruleContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property ruleContent.
|
||||||
|
*
|
||||||
|
* @param ruleContent value to be assigned to property ruleContent
|
||||||
|
*/
|
||||||
|
public void setRuleContent(String ruleContent) {
|
||||||
|
this.ruleContent = ruleContent;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl.struct;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class TransformerDetail {
|
||||||
|
|
||||||
|
@JSONField(name = "transformerCategoryEnum")
|
||||||
|
private String transformerCategoryEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property transformerCategoryEnum.
|
||||||
|
*
|
||||||
|
* @return property value of transformerCategoryEnum
|
||||||
|
*/
|
||||||
|
public String getTransformerCategoryEnum() {
|
||||||
|
return transformerCategoryEnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property transformerCategoryEnum.
|
||||||
|
*
|
||||||
|
* @param transformerCategoryEnum value to be assigned to property transformerCategoryEnum
|
||||||
|
*/
|
||||||
|
public void setTransformerCategoryEnum(String transformerCategoryEnum) {
|
||||||
|
this.transformerCategoryEnum = transformerCategoryEnum;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,129 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl.struct;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.annotation.JSONField;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class VertexMeta {
|
||||||
|
@JSONField(name = "id")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@JSONField(name = "name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@JSONField(name = "attributeTypeDetailList")
|
||||||
|
private List<PropertyMeta> attributeTypeDetailList;
|
||||||
|
|
||||||
|
@JSONField(name = "relationTypeDetailList")
|
||||||
|
private List<RelationTypeDetail> relationTypeDetailList;
|
||||||
|
|
||||||
|
@JSONField(name = "inheritAttributeTypeDetailList")
|
||||||
|
private List<PropertyMeta> inheritAttributeTypeDetailList;
|
||||||
|
|
||||||
|
@JSONField(name = "entityCategory")
|
||||||
|
private String entityCategory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property entityCategory.
|
||||||
|
*
|
||||||
|
* @return property value of entityCategory
|
||||||
|
*/
|
||||||
|
public String getEntityCategory() {
|
||||||
|
return entityCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property entityCategory.
|
||||||
|
*
|
||||||
|
* @param entityCategory value to be assigned to property entityCategory
|
||||||
|
*/
|
||||||
|
public void setEntityCategory(String entityCategory) {
|
||||||
|
this.entityCategory = entityCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property name.
|
||||||
|
*
|
||||||
|
* @return property value of name
|
||||||
|
*/
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property name.
|
||||||
|
*
|
||||||
|
* @return property value of name
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property name.
|
||||||
|
*
|
||||||
|
* @param name value to be assigned to property name
|
||||||
|
*/
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property attributeTypeDetailList.
|
||||||
|
*
|
||||||
|
* @return property value of attributeTypeDetailList
|
||||||
|
*/
|
||||||
|
public List<PropertyMeta> getAttributeTypeDetailList() {
|
||||||
|
return attributeTypeDetailList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property attributeTypeDetailList.
|
||||||
|
*
|
||||||
|
* @param attributeTypeDetailList value to be assigned to property attributeTypeDetailList
|
||||||
|
*/
|
||||||
|
public void setAttributeTypeDetailList(List<PropertyMeta> attributeTypeDetailList) {
|
||||||
|
this.attributeTypeDetailList = attributeTypeDetailList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property relationTypeDetailList.
|
||||||
|
*
|
||||||
|
* @return property value of relationTypeDetailList
|
||||||
|
*/
|
||||||
|
public List<RelationTypeDetail> getRelationTypeDetailList() {
|
||||||
|
return relationTypeDetailList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter method for property relationTypeDetailList.
|
||||||
|
*
|
||||||
|
* @return property value of relationTypeDetailList
|
||||||
|
*/
|
||||||
|
public List<PropertyMeta> getInheritAttributeTypeDetailList() {
|
||||||
|
return inheritAttributeTypeDetailList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setter method for property relationTypeDetailList.
|
||||||
|
*
|
||||||
|
* @param relationTypeDetailList value to be assigned to property relationTypeDetailList
|
||||||
|
*/
|
||||||
|
public void setRelationTypeDetailList(List<RelationTypeDetail> relationTypeDetailList) {
|
||||||
|
this.relationTypeDetailList = relationTypeDetailList;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl
|
||||||
|
|
||||||
|
case class KgSchemaConnectionInfo(uri: String, token: String)
|
@ -0,0 +1,252 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl
|
||||||
|
|
||||||
|
import scala.collection.JavaConverters._
|
||||||
|
import scala.collection.mutable
|
||||||
|
import scala.collection.mutable.ListBuffer
|
||||||
|
|
||||||
|
import com.antgroup.openspg.core.schema.model.`type`.{BaseAdvancedType, BaseSPGType, BasicType, ProjectSchema}
|
||||||
|
import com.antgroup.openspg.core.schema.model.predicate.{Property, Relation}
|
||||||
|
import com.antgroup.openspg.core.schema.model.semantic.DynamicTaxonomySemantic
|
||||||
|
import com.antgroup.openspg.reasoner.common.constants.Constants
|
||||||
|
import com.antgroup.openspg.reasoner.common.exception.SchemaException
|
||||||
|
import com.antgroup.openspg.reasoner.common.graph.edge.SPO
|
||||||
|
import com.antgroup.openspg.reasoner.common.types.KTString
|
||||||
|
import com.antgroup.openspg.reasoner.lube.catalog.{AbstractConnection, Catalog, GeneralSemanticRule, PropertyGraphSchema, SemanticPropertyGraph, SemanticRule}
|
||||||
|
import com.antgroup.openspg.reasoner.lube.catalog.struct.{Edge, Field, Node}
|
||||||
|
import com.antgroup.openspg.server.api.facade.ApiResponse
|
||||||
|
import com.antgroup.openspg.server.api.facade.client.{ConceptFacade, SchemaFacade}
|
||||||
|
import com.antgroup.openspg.server.api.facade.dto.schema.request.{ConceptRequest, ProjectSchemaRequest}
|
||||||
|
import com.antgroup.openspg.server.api.http.client.{HttpConceptFacade, HttpSchemaFacade}
|
||||||
|
import com.antgroup.openspg.server.api.http.client.util.{ConnectionInfo, HttpClientBootstrap}
|
||||||
|
import org.apache.commons.collections4.CollectionUtils
|
||||||
|
import org.apache.commons.lang3.StringUtils
|
||||||
|
|
||||||
|
|
||||||
|
class OpenSPGCatalog(val projectId: Long,
|
||||||
|
val connInfo: KgSchemaConnectionInfo,
|
||||||
|
val projectSchema: ProjectSchema = null) extends Catalog {
|
||||||
|
|
||||||
|
if (projectSchema == null) {
|
||||||
|
HttpClientBootstrap.init(new ConnectionInfo(connInfo.uri))
|
||||||
|
}
|
||||||
|
|
||||||
|
private val spgSchemaFacade: SchemaFacade = new HttpSchemaFacade()
|
||||||
|
private val spgConceptFacade: ConceptFacade = new HttpConceptFacade()
|
||||||
|
|
||||||
|
private val defineRules = new mutable.HashMap[String, SemanticRule]()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get schema from knowledge graph
|
||||||
|
*/
|
||||||
|
override def getKnowledgeGraph(): SemanticPropertyGraph = {
|
||||||
|
val realProjectSchema: ProjectSchema =
|
||||||
|
if (projectSchema == null) {
|
||||||
|
val request = new ProjectSchemaRequest()
|
||||||
|
request.setProjectId(projectId)
|
||||||
|
resultOf(spgSchemaFacade.queryProjectSchema(request))
|
||||||
|
} else {
|
||||||
|
projectSchema
|
||||||
|
}
|
||||||
|
|
||||||
|
val nodes: mutable.Map[String, Node] = new mutable.HashMap[String, Node]()
|
||||||
|
val edges: mutable.Map[SPO, Edge] = new mutable.HashMap[SPO, Edge]
|
||||||
|
realProjectSchema.getSpgTypes.asScala.foreach(spgType => {
|
||||||
|
val node = toNode(realProjectSchema, spgType)
|
||||||
|
if (node != null) {
|
||||||
|
nodes.put(spgType.getName, node)
|
||||||
|
|
||||||
|
val vertexEdges = toEdges(realProjectSchema, spgType)
|
||||||
|
for (e <- vertexEdges) {
|
||||||
|
if (edges.contains(e._1)) {
|
||||||
|
val edgeInfo = edges(e._1)
|
||||||
|
val mergeSet = edgeInfo.properties ++ e._2.properties
|
||||||
|
edges += (e._1 -> Edge(
|
||||||
|
edgeInfo.startNode,
|
||||||
|
edgeInfo.typeName,
|
||||||
|
edgeInfo.endNode,
|
||||||
|
mergeSet,
|
||||||
|
edgeInfo.resolved))
|
||||||
|
} else {
|
||||||
|
edges += e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
new SemanticPropertyGraph(
|
||||||
|
Catalog.defaultGraphName,
|
||||||
|
new PropertyGraphSchema(nodes, edges),
|
||||||
|
defineRules,
|
||||||
|
null)
|
||||||
|
}
|
||||||
|
|
||||||
|
private def toNode(projectSchema: ProjectSchema, spgType: BaseSPGType): Node = {
|
||||||
|
val attrList = new ListBuffer[Field]()
|
||||||
|
attrList.+=(defaultTypeField)
|
||||||
|
spgType match {
|
||||||
|
case _: BasicType =>
|
||||||
|
null
|
||||||
|
case advancedType: BaseAdvancedType =>
|
||||||
|
attrList.++=(advancedType.getProperties.asScala.map(spgProperty => {
|
||||||
|
toField(projectSchema, spgType, spgProperty)
|
||||||
|
}))
|
||||||
|
attrList.++=(getDefaultNodeProperties())
|
||||||
|
Node(
|
||||||
|
advancedType.getName,
|
||||||
|
PropertySchemaOps.toNodeType(spgType.getSpgTypeEnum),
|
||||||
|
attrList.toSet,
|
||||||
|
true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def toField(projectSchema: ProjectSchema,
|
||||||
|
spgType: BaseSPGType,
|
||||||
|
spgProperty: Property): Field = {
|
||||||
|
val propertyType = PropertySchemaOps
|
||||||
|
.stringToKgType2(projectSchema.getByRef(spgProperty.getObjectTypeRef))
|
||||||
|
val rule = spgProperty.getLogicalRule
|
||||||
|
val predicateName = spgProperty.getName
|
||||||
|
if (rule != null && StringUtils.isNotBlank(rule.getContent)) {
|
||||||
|
defineRules.put(s"${spgType.getName}.${predicateName}", GeneralSemanticRule(rule.getContent))
|
||||||
|
new Field(predicateName, propertyType, false)
|
||||||
|
} else {
|
||||||
|
new Field(predicateName, propertyType, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def defaultTypeField: Field = {
|
||||||
|
new Field(Constants.CONTEXT_LABEL, KTString, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
private def toEdges(projectSchema: ProjectSchema, spgType: BaseSPGType): Map[SPO, Edge] = {
|
||||||
|
if (CollectionUtils.isEmpty(spgType.getRelations)) {
|
||||||
|
Map.empty
|
||||||
|
} else {
|
||||||
|
spgType.getRelations.asScala
|
||||||
|
.flatMap(relation => toEdge(projectSchema, spgType, relation))
|
||||||
|
.map(e => (new SPO(e.startNode, e.typeName, e.endNode), e))
|
||||||
|
.toMap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def toEdge(projectSchema: ProjectSchema,
|
||||||
|
spgType: BaseSPGType,
|
||||||
|
rel: Relation): List[Edge] = {
|
||||||
|
val attrList = rel.getSubProperties.asScala.toList
|
||||||
|
val fields = new ListBuffer[Field]()
|
||||||
|
val s = spgType.getName
|
||||||
|
val p = rel.getName
|
||||||
|
val o = rel.getObjectTypeRef.getName
|
||||||
|
val spo = new SPO(s, p, o).toString
|
||||||
|
|
||||||
|
fields.++=(attrList.map(att => {
|
||||||
|
val relationType = PropertySchemaOps
|
||||||
|
.stringToKgType2(projectSchema.getByRef(att.getObjectTypeRef))
|
||||||
|
new Field(att.getName, relationType, true)
|
||||||
|
}))
|
||||||
|
fields.+=(defaultTypeField)
|
||||||
|
fields.++=(getDefaultEdgeProperties())
|
||||||
|
|
||||||
|
val rule = rel.getLogicalRule
|
||||||
|
if (rule != null && StringUtils.isNotBlank(rule.getContent)) {
|
||||||
|
defineRules.put(spo, GeneralSemanticRule(rule.getContent))
|
||||||
|
List.apply(Edge(s, p, o, fields.toSet, false))
|
||||||
|
} else if (p.equals("belongTo")) {
|
||||||
|
val request = new ConceptRequest()
|
||||||
|
request.setConceptTypeName(o)
|
||||||
|
|
||||||
|
val concept = resultOf(spgConceptFacade.queryConcept(request))
|
||||||
|
if (CollectionUtils.isNotEmpty(concept.getConcepts)) {
|
||||||
|
concept.getConcepts.asScala
|
||||||
|
.map(r => {
|
||||||
|
r.getSemantics.asScala.foreach {
|
||||||
|
case belong: DynamicTaxonomySemantic =>
|
||||||
|
if (belong.getLogicalRule != null) {
|
||||||
|
defineRules.put(spo + "/" + r.getName,
|
||||||
|
GeneralSemanticRule(belong.getLogicalRule.getContent))
|
||||||
|
}
|
||||||
|
case _ =>
|
||||||
|
}
|
||||||
|
Edge(s, p, o + "/" + r.getName, fields.toSet, false)
|
||||||
|
})
|
||||||
|
.toList
|
||||||
|
} else {
|
||||||
|
List.apply(Edge(s, p, o, fields.toSet, true))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
List.apply(Edge(s, p, o, fields.toSet, true))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get connections of knowledge graph
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
override def getConnections(): Map[AbstractConnection, Set[String]] = {
|
||||||
|
val connections = new mutable.HashMap[AbstractConnection, Set[String]]()
|
||||||
|
graphRepository
|
||||||
|
.get("KG")
|
||||||
|
.map(graph => {
|
||||||
|
val graphSchema = graph.graphSchema
|
||||||
|
|
||||||
|
val types = new mutable.HashSet[String]()
|
||||||
|
types.++=(graphSchema.nodes.keySet)
|
||||||
|
types.++=(graphSchema.edges.map(x => x._1.toString).toSet)
|
||||||
|
|
||||||
|
connections.put(new AbstractConnection {}, types.toSet)
|
||||||
|
})
|
||||||
|
connections.toMap
|
||||||
|
}
|
||||||
|
|
||||||
|
private def resultOf[T](apiResponse: ApiResponse[T]): T = {
|
||||||
|
if (apiResponse.isSuccess) {
|
||||||
|
apiResponse.getData
|
||||||
|
} else {
|
||||||
|
throw SchemaException("Get Schema failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get default node properties
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
override def getDefaultNodeProperties()
|
||||||
|
: Set[Field] = {
|
||||||
|
Set.apply(
|
||||||
|
new Field(Constants.NODE_ID_KEY, KTString, true),
|
||||||
|
new Field(Constants.VERTEX_INTERNAL_ID_KEY, KTString, true),
|
||||||
|
new Field(Constants.CONTEXT_LABEL, KTString, true))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get default edge properties
|
||||||
|
*/
|
||||||
|
override def getDefaultEdgeProperties()
|
||||||
|
: Set[Field] = {
|
||||||
|
Set.apply(
|
||||||
|
new Field(Constants.CONTEXT_LABEL, KTString, true),
|
||||||
|
new Field(Constants.EDGE_FROM_ID_KEY, KTString, true),
|
||||||
|
new Field(Constants.EDGE_TO_ID_KEY, KTString, true),
|
||||||
|
new Field(Constants.EDGE_FROM_INTERNAL_ID_KEY, KTString, true),
|
||||||
|
new Field(Constants.EDGE_TO_INTERNAL_ID_KEY, KTString, true),
|
||||||
|
new Field(Constants.EDGE_FROM_ID_TYPE_KEY, KTString, true),
|
||||||
|
new Field(Constants.EDGE_TO_ID_TYPE_KEY, KTString, true)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl
|
||||||
|
|
||||||
|
import scala.language.implicitConversions
|
||||||
|
|
||||||
|
import com.antgroup.openspg.core.schema.model.`type`.{BaseSPGType, BasicType, ConceptType, EntityType, EventType, SPGTypeEnum, StandardType}
|
||||||
|
import com.antgroup.openspg.reasoner.catalog.impl.struct.PropertyMeta
|
||||||
|
import com.antgroup.openspg.reasoner.common.exception.KGValueException
|
||||||
|
import com.antgroup.openspg.reasoner.common.types._
|
||||||
|
import com.antgroup.openspg.reasoner.lube.catalog.struct.NodeType
|
||||||
|
|
||||||
|
object PropertySchemaOps {
|
||||||
|
|
||||||
|
implicit def stringToKgType(propertySchema: PropertyMeta): KgType = {
|
||||||
|
propertySchema.getCategory match {
|
||||||
|
case "BASIC" =>
|
||||||
|
toKgType(propertySchema.getPropRange.getAttrRangeTypeEnum)
|
||||||
|
case "CONCEPT" =>
|
||||||
|
KTConcept(propertySchema.getPropRange.getRangeEntityName)
|
||||||
|
case "STANDARD" =>
|
||||||
|
KTStd(propertySchema.getPropRange.getRangeEntityName, propertySchema.isSpreadable)
|
||||||
|
case "PROPERTY" =>
|
||||||
|
KTStd(propertySchema.getPropRange.getRangeEntityName, propertySchema.isSpreadable)
|
||||||
|
case "ENTITY" =>
|
||||||
|
KTAdvanced(propertySchema.getPropRange.getRangeEntityName)
|
||||||
|
case _ => throw KGValueException(s"unsupported type: ${propertySchema.getCategory}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def stringToKgType2(spgType: BaseSPGType): KgType = {
|
||||||
|
spgType match {
|
||||||
|
case entityType: EntityType =>
|
||||||
|
KTAdvanced(entityType.getName)
|
||||||
|
case conceptType: ConceptType =>
|
||||||
|
KTConcept(conceptType.getName)
|
||||||
|
case eventType: EventType =>
|
||||||
|
// todo
|
||||||
|
KTAdvanced(eventType.getName)
|
||||||
|
case standardType: StandardType =>
|
||||||
|
KTStd(spgType.getName, standardType.getSpreadable)
|
||||||
|
case basicType: BasicType =>
|
||||||
|
toKgType(basicType.getBasicType.name())
|
||||||
|
case _ =>
|
||||||
|
throw KGValueException(s"unsupported type: ${spgType}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def toKgType(basicType: String): KgType = {
|
||||||
|
basicType.toUpperCase() match {
|
||||||
|
case "INTEGER" => KTLong
|
||||||
|
case "LONG" => KTLong
|
||||||
|
case "TEXT" => KTString
|
||||||
|
case "FLOAT" => KTDouble
|
||||||
|
case "DOUBLE" => KTDouble
|
||||||
|
case "BOOLEAN" => KTString
|
||||||
|
case "DATE" => KTString
|
||||||
|
case "TIME" => KTString
|
||||||
|
case "URL" => KTString
|
||||||
|
case "DATETIME" => KTString
|
||||||
|
case "TIMESTAMP" => KTString
|
||||||
|
case _ => throw KGValueException(s"unsupported type: $basicType")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def toNodeType(spgType: SPGTypeEnum): NodeType.Value = {
|
||||||
|
spgType match {
|
||||||
|
case SPGTypeEnum.ENTITY_TYPE =>
|
||||||
|
NodeType.ADVANCED
|
||||||
|
case SPGTypeEnum.CONCEPT_TYPE =>
|
||||||
|
NodeType.CONCEPT
|
||||||
|
case SPGTypeEnum.STANDARD_TYPE =>
|
||||||
|
NodeType.STANDARD
|
||||||
|
case SPGTypeEnum.EVENT_TYPE =>
|
||||||
|
NodeType.EVENT
|
||||||
|
case _ => throw KGValueException(s"unsupported type: $spgType")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Ant Group CO., Ltd.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
* or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.antgroup.openspg.reasoner.catalog.impl;
|
||||||
|
|
||||||
|
import com.antgroup.openspg.reasoner.lube.catalog.SemanticPropertyGraph;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Ignore;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
public class OpenSPGCatalogTest {
|
||||||
|
|
||||||
|
public static final KgSchemaConnectionInfo connInfo =
|
||||||
|
new KgSchemaConnectionInfo("http://127.0.0.1:8887", "a8bB6398B6Da9170");
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGet() {
|
||||||
|
long projectId = 2L;
|
||||||
|
|
||||||
|
OpenSPGCatalog catalog = new OpenSPGCatalog(projectId, connInfo, null);
|
||||||
|
catalog.init();
|
||||||
|
SemanticPropertyGraph graph = catalog.getKnowledgeGraph();
|
||||||
|
|
||||||
|
Assert.assertNotNull(graph);
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@ import com.antgroup.openspg.reasoner.lube.common.graph.IRGraph
|
|||||||
* and the property graph at runtime
|
* and the property graph at runtime
|
||||||
*/
|
*/
|
||||||
abstract class Catalog() extends Serializable {
|
abstract class Catalog() extends Serializable {
|
||||||
private val graphRepository = new mutable.HashMap[String, SemanticPropertyGraph]()
|
protected val graphRepository = new mutable.HashMap[String, SemanticPropertyGraph]()
|
||||||
private val connections = new mutable.HashMap[String, AbstractConnection]()
|
private val connections = new mutable.HashMap[String, AbstractConnection]()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
<module>udf</module>
|
<module>udf</module>
|
||||||
<module>lube-api</module>
|
<module>lube-api</module>
|
||||||
<module>kgdsl-parser</module>
|
<module>kgdsl-parser</module>
|
||||||
|
<module>catalog/openspg-catalog</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user