Public Overloads Function Create( _ ByVal namedObjectTypeDescription As KnowledgeGraphTypeDescription _ ) As KnowledgeGraphTypeToken
Parameters
- namedObjectTypeDescription
Public Overloads Function Create( _ ByVal namedObjectTypeDescription As KnowledgeGraphTypeDescription _ ) As KnowledgeGraphTypeToken
| Exception | Description |
|---|---|
| System.ArgumentNullException | namedObjectTypeDescription is null |
| System.InvalidOperationException | A KnowledgeGraph must be set as the datasource for this operation |
| ArcGIS.Core.CalledOnWrongThreadException | This method or property must be called within the lambda passed to QueuedTask.Run. |
{
// Must be called within QueuedTask.Run
void CreatingTableWithIndex(SchemaBuilder schemaBuilder)
{
FieldDescription nameFieldDescription = FieldDescription.CreateStringField("Name", 50);
FieldDescription addressFieldDescription = FieldDescription.CreateStringField("Address", 200);
// Creating a feature class, 'Buildings' with two fields
TableDescription tableDescription = new TableDescription("Buildings",
new List<FieldDescription>() { nameFieldDescription, addressFieldDescription });
// Enqueue DDL operation to create a table
TableToken tableToken = schemaBuilder.Create(tableDescription);
// Creating an attribute index named as 'Idx'
AttributeIndexDescription attributeIndexDescription = new AttributeIndexDescription("Idx", new TableDescription(tableToken),
new List<string> { nameFieldDescription.Name, addressFieldDescription.Name });
// Enqueue DDL operation to create an attribute index
schemaBuilder.Create(attributeIndexDescription);
// Execute build indexes operation
bool isBuildSuccess = schemaBuilder.Build();
}
}
{
// Must be called within QueuedTask.Run
void AddingIndexes(SchemaBuilder schemaBuilder, FeatureClassDefinition featureClassDefinition)
{
// Field names to add in the attribute index
string fieldName = featureClassDefinition.GetFields().First(f => f.AliasName.Contains("Name")).Name;
string fieldAddress = featureClassDefinition.GetFields().First(f => f.AliasName.Contains("Address")).Name;
// Creating an attribute index with index name 'Idx' and two participating fields' name
AttributeIndexDescription attributeIndexDescription = new AttributeIndexDescription("Idx",
new TableDescription(featureClassDefinition), new List<string> { fieldName, fieldAddress });
// Enqueue DDL operation for an attribute index creation
schemaBuilder.Create(attributeIndexDescription);
// Creating the spatial index
SpatialIndexDescription spatialIndexDescription = new SpatialIndexDescription(new FeatureClassDescription(featureClassDefinition));
// Enqueue DDL operation for the spatial index creation
schemaBuilder.Create(spatialIndexDescription);
// Execute build indexes operation
bool isBuildSuccess = schemaBuilder.Build();
if (!isBuildSuccess)
{
IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
// Iterate and handle errors
}
}
}
{
// Must be called within QueuedTask.Run
void CreateTableWithSubtypes(SchemaBuilder schemaBuilder)
{
// Creating a 'Building' table with the subtype field 'BuildingType'
FieldDescription buildingType = new FieldDescription("BuildingType", FieldType.Integer);
FieldDescription buildingName = new FieldDescription("Name", FieldType.String);
TableDescription tableDescription = new TableDescription("Building", new List<FieldDescription> { buildingName, buildingType });
// Add the building type subtype with three subtypes - Business, Marketing, Security
tableDescription.SubtypeFieldDescription = new SubtypeFieldDescription(buildingType.Name,
new Dictionary<int, string> { { 1, "Business" }, { 2, "Marketing" }, { 3, "Security" } })
{
DefaultSubtypeCode = 3 // Assigning 'Security' building type as the default subtype
};
schemaBuilder.Create(tableDescription);
schemaBuilder.Build();
}
}
{
// Must be called within QueuedTask.Run
void CreateRelationshipWithRelationshipRules(SchemaBuilder schemaBuilder)
{
// Creating a 'BuildingType' table with two fields - BuildingType and BuildingTypeDescription
FieldDescription buildingType = FieldDescription.CreateIntegerField("BuildingType");
FieldDescription buildingTypeeDescription = FieldDescription.CreateStringField("BuildingTypeDescription", 100);
TableDescription buildingTypeDescription = new TableDescription("BuildingType",
new List<FieldDescription>() { buildingType, buildingTypeeDescription });
TableToken buildingtypeToken = schemaBuilder.Create(buildingTypeDescription);
// Creating a 'Building' feature class with three fields - BuildingId, Address, and BuildingType
FieldDescription buildingId = FieldDescription.CreateIntegerField("BuildingId");
FieldDescription buildingAddress = FieldDescription.CreateStringField("Address", 100);
FieldDescription usageSubType = FieldDescription.CreateIntegerField("UsageSubtype");
FeatureClassDescription featureClassDescription = new FeatureClassDescription("Building",
new List<FieldDescription> { buildingId, buildingAddress, buildingType, usageSubType },
new ShapeDescription(GeometryType.Polygon, SpatialReferences.WGS84));
// Set subtype details (optional)
featureClassDescription.SubtypeFieldDescription = new SubtypeFieldDescription(usageSubType.Name,
new Dictionary<int, string> { { 1, "Marketing" }, { 2, "Utility" } });
FeatureClassToken buildingToken = schemaBuilder.Create(featureClassDescription);
// Creating a 1:M relationship between the 'Building' feature class and 'BuildingType' table
RelationshipClassDescription relationshipClassDescription = new RelationshipClassDescription(
"BuildingToBuildingType", new FeatureClassDescription(buildingToken), new TableDescription(buildingtypeToken),
RelationshipCardinality.OneToMany, buildingType.Name, buildingType.Name)
{
RelationshipType = RelationshipType.Composite
};
// Adding relationship rules for the 'Marketing' subtype
relationshipClassDescription.RelationshipRuleDescriptions.Add(new RelationshipRuleDescription(1, null));
schemaBuilder.Create(relationshipClassDescription);
schemaBuilder.Build();
}
}
{
// Must be called within QueuedTask.Run
void CreateAttributedRelationship(SchemaBuilder schemaBuilder)
{
// Creating a 'BuildingType' table with two fields - BuildingType and BuildingTypeDescription
FieldDescription buildingType = FieldDescription.CreateIntegerField("BuildingType");
FieldDescription buildingTypeeDescription = FieldDescription.CreateStringField("BuildingTypeDescription", 100);
TableDescription buildingTypeDescription = new TableDescription("BuildingType",
new List<FieldDescription>() { buildingType, buildingTypeeDescription });
TableToken buildingtypeToken = schemaBuilder.Create(buildingTypeDescription);
// Creating a 'Building' feature class with three fields - BuildingId, Address, and BuildingType
FieldDescription buildingId = FieldDescription.CreateIntegerField("BuildingId");
FieldDescription buildingAddress = FieldDescription.CreateStringField("Address", 100);
FeatureClassDescription featureClassDescription = new FeatureClassDescription("Building",
new List<FieldDescription> { buildingId, buildingAddress, buildingType },
new ShapeDescription(GeometryType.Polygon, SpatialReferences.WGS84));
FeatureClassToken buildingToken = schemaBuilder.Create(featureClassDescription);
// Creating M:M relationship between the 'Building' feature class and 'BuildingType' table
AttributedRelationshipClassDescription attributedRelationshipClassDescription =
new AttributedRelationshipClassDescription("BuildingToBuildingType",
new FeatureClassDescription(buildingToken),
new TableDescription(buildingtypeToken), RelationshipCardinality.ManyToMany, "OBJECTID", "BuildingID",
"OBJECTID", "BuildingTypeID");
// Adding optional attribute field in the intermediate table - 'OwnershipPercentage' field
attributedRelationshipClassDescription.FieldDescriptions.Add(FieldDescription.CreateIntegerField("OwnershipPercentage"));
schemaBuilder.Create(attributedRelationshipClassDescription);
schemaBuilder.Build();
}
}
{
await QueuedTask.Run(() =>
{
using (var kg = GetKnowledgeGraph(url))
{
var entity_name = "PhoneCall";
var relate_name = "WhoCalledWho";
//Entity Fields
var descs1 =
new List<KnowledgeGraphPropertyDescription>();
descs1.Add(
new KnowledgeGraphPropertyDescription("PhoneOwner", FieldType.String));
descs1.Add(
new KnowledgeGraphPropertyDescription("PhoneNumber", FieldType.String));
descs1.Add(
new KnowledgeGraphPropertyDescription("LocationID", FieldType.BigInteger));
descs1.Add(
new KnowledgeGraphPropertyDescription("DateAndTime", FieldType.Date));
//Relate Fields
var descs2 =
new List<KnowledgeGraphPropertyDescription>();
descs2.Add(
new KnowledgeGraphPropertyDescription("Foo", FieldType.String));
descs2.Add(
new KnowledgeGraphPropertyDescription("Bar", FieldType.String));
var includeShape = true;//change to false to omit the shape column
var hasZ = false;
var hasM = false;
KnowledgeGraphEntityTypeDescription entityDesc = null;
KnowledgeGraphRelationshipTypeDescription relateDesc = null;
if (includeShape)
{
var sr = kg.GetSpatialReference();
var shp_desc = new ShapeDescription(GeometryType.Point, sr)
{
HasM = hasM,
HasZ = hasZ
};
entityDesc = new KnowledgeGraphEntityTypeDescription(
entity_name, descs1, shp_desc);
relateDesc = new KnowledgeGraphRelationshipTypeDescription(
relate_name, descs2, shp_desc);
}
else
{
entityDesc = new KnowledgeGraphEntityTypeDescription(
entity_name, descs1);
relateDesc = new KnowledgeGraphRelationshipTypeDescription(
relate_name, descs2);
}
//Run the schema builder
try
{
SchemaBuilder sb = new(kg);
sb.Create(entityDesc);
sb.Create(relateDesc);
//Use the KnowledgeGraph extension method 'ApplySchemaEdits(...)'
//to refresh the Pro UI
if (!kg.ApplySchemaEdits(sb))
{
var err_msg = string.Join(",", sb.ErrorMessages.ToArray());
System.Diagnostics.Debug.WriteLine($"Entity/Relate Create error: {err_msg}");
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
}
});
}
Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)