public CIMKnowledgeGraphNamedTypeFilter[] RelationshipFilters {get; set;}
Public Property RelationshipFilters As CIMKnowledgeGraphNamedTypeFilter()
public CIMKnowledgeGraphNamedTypeFilter[] RelationshipFilters {get; set;}
Public Property RelationshipFilters As CIMKnowledgeGraphNamedTypeFilter()
//using ArcGIS.Core.Data.Knowledge.Extensions;
await QueuedTask.Run(() =>
{
//Assume Relationship NamedTypes "R1","R2",and "R3"
//
//We can use either of a CIMKnowledgeGraphNamedTypeFilterByInstances
//or CIMKnowledgeGraphNamedTypeFilterByType to filter instances for
//_including_ in or _excluding_ from entities and relates wrt the subgraph.
//
//Use CIMKnowledgeGraphNamedTypeFilterByInstances to filter by instance id
//Use CIMKnowledgeGraphNamedTypeFilterByType to filter by type name and with
//an optional property filter predicate to filter by property value(s)
//Example 1.
//Include all relates (and entities) from the kg in the subgraph
//Leave kg_subgraph.RelationshipFilters null
//(kg_subgraph.EntityFilters is also null)
//The collection of Entity and Relate filters are both empty
//Everything is included
var kg_subgraph = new CIMKnowledgeGraphSubGraph();
//note - relates can only be included if their corresponding entity end points
//are also included in the subgraph.
//Example 2
//Include a set of Relates from R1 (all of R2, R3 will be implicitly excluded)
var kg_filter_r2 = new CIMKnowledgeGraphNamedTypeFilterByInstances()
{
FilterType = KGFilterType.Include,
NamedType = "R1",
InstancesIDs = list_of_ids.ToArray() //list_of_ids contains desired uids for "R1"
//note: -if list_of_ids is empty then -no-
//instances of R1 will be included.
};
//var kg_subgraph = ...
var relate_filters2 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters2.Add(kg_filter_r2);
//note: All entities are included as no EntityFilters are specified
//var kg_subgraph = ...
kg_subgraph.RelationshipFilters = relate_filters2.ToArray();
//Example 3
//Exclude a set of Relates from R1 (all of R2, R3 will be implicitly included)
var kg_filter_r3 = new CIMKnowledgeGraphNamedTypeFilterByInstances()
{
FilterType = KGFilterType.Exclude,
NamedType = "R1",
InstancesIDs = list_of_ids.ToArray() //list_of_ids contains desired uids for "R1"
//note: -if list_of_ids is empty then -no-
//instances of R1 will be excluded.
};
var relate_filters3 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters3.Add(kg_filter_r3);
//note: All entities are included as no EntityFilters are specified
//var kg_subgraph = ...
kg_subgraph.RelationshipFilters = relate_filters3.ToArray();
//Example 4
//Include all Relates from R1 via named type (all of R2, R3
//will be implicitly excluded)
var kg_filter_r4 = new CIMKnowledgeGraphNamedTypeFilterByType()
{
FilterType = KGFilterType.Include,
NamedType = "R1",//all of R1 will be included
//predicate is empty
};
var relate_filters4 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters4.Add(kg_filter_r4);
//note: All entities are included as no EntityFilters are specified
//var kg_subgraph = ...
kg_subgraph.RelationshipFilters = relate_filters4.ToArray();
//Example 5
//Exclude all Relates from R1 via named type (all of R2, R3
//will be implicitly included)
var kg_filter_r5 = new CIMKnowledgeGraphNamedTypeFilterByType()
{
FilterType = KGFilterType.Exclude,
NamedType = "R1" //all of R1 will be excluded
};
var relate_filters5 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters5.Add(kg_filter_r5);
//note: All entities are included as no EntityFilters are specified
//var kg_subgraph = ...
kg_subgraph.RelationshipFilters = relate_filters5.ToArray();
//Example 6
//Include all relates from R2 and
//a subset from R3 (R1 is implicitly excluded)
var kg_filter_r6_r2 = new CIMKnowledgeGraphNamedTypeFilterByType();
kg_filter_r6_r2.NamedType = "R2"; //Include is default, predicate is empty
//TODO... populate list with uids from "R3"...
var kg_filter_r6_r3 = new CIMKnowledgeGraphNamedTypeFilterByInstances();
kg_filter_r6_r3.NamedType = "R3"; //Include is default
kg_filter_r6_r3.InstancesIDs = list_of_ids.ToArray();
var relate_filters6 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters6.Add(kg_filter_r6_r2);//order doesn't matter
relate_filters6.Add(kg_filter_r6_r3);
//note: All entities are included as no EntityFilters are specified
//var kg_subgraph = ...
kg_subgraph.RelationshipFilters = relate_filters6.ToArray();
//Example 7
//Exclude all relates from R2 and
//a subset from R3 (R1 is implicitly included)
var kg_filter_r7_r2 = new CIMKnowledgeGraphNamedTypeFilterByType();
kg_filter_r7_r2.NamedType = "R2";
kg_filter_r7_r2.FilterType = KGFilterType.Exclude;
//TODO... populate list with uids from "R3"...
var kg_filter_r7_r3 = new CIMKnowledgeGraphNamedTypeFilterByInstances();
kg_filter_r7_r3.NamedType = "R3";
kg_filter_r7_r3.FilterType = KGFilterType.Exclude;
kg_filter_r7_r3.InstancesIDs = list_of_ids.ToArray();
var relate_filters7 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters7.Add(kg_filter_r7_r2);//order doesn't matter
relate_filters7.Add(kg_filter_r7_r3);
//note: All entities are included as no EntityFilters are specified
//var kg_subgraph = ...
kg_subgraph.RelationshipFilters = relate_filters6.ToArray();
//Example 8
//Include a subset of Relates from R1 using a property
//filter predicate (all of R2, R3 will be implicitly excluded)
//we -must- use a predicate prefix in our expression
//select instances of R1 w/Distance = 2000
var expr8 = $"r1.Distance = 2000";//prefix can be anything - foo, bar, fred, etc.
var kg_filter_r8 = new CIMKnowledgeGraphNamedTypeFilterByType()
{
NamedType = "R1", //Include is default
PropertyFilterPredicate = expr8
};
var relate_filters8 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters8.Add(kg_filter_r8);
//note: All entities are included as no EntityFilters are specified
//var kg_subgraph = ...
kg_subgraph.RelationshipFilters = relate_filters8.ToArray();
//Example 9
//Exclude a subset of Relates from R1 using a property
//filter predicate (all of R2, R3 will be implicitly included)
//we -must- use a predicate prefix in our expression
//select instances of R1 w/ Distance <> 2000
var expr9 = $"r1.Distance <> 2000";//prefix can be anything - foo, bar, fred, etc.
var kg_filter_r9 = new CIMKnowledgeGraphNamedTypeFilterByType()
{
FilterType = KGFilterType.Exclude,
NamedType = "R1",
PropertyFilterPredicate = expr9 //exclude ids w/ Distance <> 2000
};
var relate_filters9 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters9.Add(kg_filter_r9);
//Note: All entities are included as no EntityFilters are specified
//var kg_subgraph = ...
kg_subgraph.RelationshipFilters = relate_filters9.ToArray();
});
//using ArcGIS.Core.Data.Knowledge.Extensions;
await QueuedTask.Run(() =>
{
//Assume Entity NamedTypes "A","B","C", and "D"
//Assume Relationship NamedTypes "R1","R2",and "R3"
//Example 1
//Include all Entities from A and B
//Include all Relates from R1 and R2
//(all of C, D, and R3 will be implicitly excluded)
var kg_filter1_a = new CIMKnowledgeGraphNamedTypeFilterByType()
{
FilterType = KGFilterType.Include,//default
NamedType = "A"
};
var kg_filter1_b = new CIMKnowledgeGraphNamedTypeFilterByType()
{
FilterType = KGFilterType.Include,//default
NamedType = "B"
};
var kg_filter1_r1 = new CIMKnowledgeGraphNamedTypeFilterByType()
{
FilterType = KGFilterType.Include,//default
NamedType = "R1"
};
var kg_filter1_r2 = new CIMKnowledgeGraphNamedTypeFilterByType()
{
FilterType = KGFilterType.Include,//default
NamedType = "R2"
};
var entity_filters1 = new List<CIMKnowledgeGraphNamedTypeFilter>();
entity_filters1.Add(kg_filter1_a);
entity_filters1.Add(kg_filter1_b);
var relate_filters1 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters1.Add(kg_filter1_r1);
relate_filters1.Add(kg_filter1_r2);
//var kg_subgraph = ...
kg_subgraph.EntityFilters = entity_filters1.ToArray();
kg_subgraph.RelationshipFilters = relate_filters1.ToArray();
//Example 2 -
//Include a subset of Entities from A using a predicate,
//and all of B, C, D and all of R1 and R3 (but not R2)
var prefix2 = "a";//prefix can be anything - foo, bar, fred, etc.
var expr2 = $"{prefix2}.Material = 'Steel' AND " +
$"{prefix2}.Role = 'Tier1'";
var kg_filter2_a = new CIMKnowledgeGraphNamedTypeFilterByType()
{
NamedType = "A", //Include is default
PropertyFilterPredicate = expr2
};
var kg_filter2_b = new CIMKnowledgeGraphNamedTypeFilterByType()
{
NamedType = "B" //Include is default
};
var kg_filter2_c = new CIMKnowledgeGraphNamedTypeFilterByType()
{
NamedType = "C" //Include is default
};
var kg_filter2_d = new CIMKnowledgeGraphNamedTypeFilterByType()
{
NamedType = "D" //Include is default
};
var kg_filter2_r1 = new CIMKnowledgeGraphNamedTypeFilterByType()
{
NamedType = "R1" //Include is default
};
var kg_filter2_r3 = new CIMKnowledgeGraphNamedTypeFilterByType()
{
NamedType = "R3" //Include is default
};
var entity_filters2 = new List<CIMKnowledgeGraphNamedTypeFilter>();
entity_filters2.Add(kg_filter2_a);
entity_filters2.Add(kg_filter2_b);
entity_filters2.Add(kg_filter2_c);
entity_filters2.Add(kg_filter2_d);
var relate_filters2 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters2.Add(kg_filter2_r1);
relate_filters2.Add(kg_filter2_r3);
//var kg_subgraph = ...
kg_subgraph.EntityFilters = entity_filters2.ToArray();
kg_subgraph.RelationshipFilters = relate_filters2.ToArray();
//Example 3
//Exclude all entities from B and C and
//a subset from D (A is implicitly included)
//
//Include all relates from R2 and
//a subset from R3 (R1 is implicitly excluded)
var kg_filter3_b = new CIMKnowledgeGraphNamedTypeFilterByType();
var kg_filter3_c = new CIMKnowledgeGraphNamedTypeFilterByType();
kg_filter3_b.NamedType = "B";
kg_filter3_c.NamedType = "C";
kg_filter3_b.FilterType = KGFilterType.Exclude;
kg_filter3_c.FilterType = KGFilterType.Exclude;
//TODO... populate list with uids from "D"...
var kg_filter3_d = new CIMKnowledgeGraphNamedTypeFilterByInstances();
kg_filter3_d.NamedType = "D";
kg_filter3_d.FilterType = KGFilterType.Exclude;
kg_filter3_d.InstancesIDs = list_of_ids.ToArray();
var kg_filter3_r2 = new CIMKnowledgeGraphNamedTypeFilterByType();
kg_filter3_r2.NamedType = "R2";//Include is default
//TODO... populate list with uids from "R3"...
var kg_filter3_r3 = new CIMKnowledgeGraphNamedTypeFilterByInstances();
kg_filter3_r3.NamedType = "R3";//Include is default
kg_filter3_r3.InstancesIDs = list_of_ids2.ToArray();
var entity_filters3 = new List<CIMKnowledgeGraphNamedTypeFilter>();
entity_filters3.Add(kg_filter3_b);//order doesn't matter
entity_filters3.Add(kg_filter3_c);
entity_filters3.Add(kg_filter3_d);
var relate_filters3 = new List<CIMKnowledgeGraphNamedTypeFilter>();
relate_filters3.Add(kg_filter3_r2);//order doesn't matter
relate_filters3.Add(kg_filter3_r3);
//var kg_subgraph = ...
kg_subgraph.EntityFilters = entity_filters3.ToArray();
kg_subgraph.RelationshipFilters = relate_filters3.ToArray();
});
Target Platforms: Windows 11, Windows 10