people tags #387
This commit is contained in:
parent
da4a0f7c14
commit
1614b6e7ca
@ -3,7 +3,7 @@
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"dotnet-ef": {
|
||||
"version": "9.0.2",
|
||||
"version": "10.0.12",
|
||||
"commands": [
|
||||
"dotnet-ef"
|
||||
],
|
||||
|
||||
6367
RMuseum/Migrations/20260928051202_FamilyTreeModels.Designer.cs
generated
Normal file
6367
RMuseum/Migrations/20260928051202_FamilyTreeModels.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
121
RMuseum/Migrations/20260928051202_FamilyTreeModels.cs
Normal file
121
RMuseum/Migrations/20260928051202_FamilyTreeModels.cs
Normal file
@ -0,0 +1,121 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace RMuseum.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class FamilyTreeModels : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "FamilyTreeCaption",
|
||||
table: "GanjoorRelatedPersons",
|
||||
type: "nvarchar(max)",
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "SuggestedPersonGraphJson",
|
||||
table: "GanjoorPoemGeoDateTagCorrection",
|
||||
type: "nvarchar(max)",
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "GanjoorPersonAffiliations",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Person1Id = table.Column<int>(type: "int", nullable: false),
|
||||
Person2Id = table.Column<int>(type: "int", nullable: false),
|
||||
AffiliationType = table.Column<int>(type: "int", nullable: false),
|
||||
Note = table.Column<string>(type: "nvarchar(max)", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_GanjoorPersonAffiliations", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_GanjoorPersonAffiliations_GanjoorRelatedPersons_Person1Id",
|
||||
column: x => x.Person1Id,
|
||||
principalTable: "GanjoorRelatedPersons",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
table.ForeignKey(
|
||||
name: "FK_GanjoorPersonAffiliations_GanjoorRelatedPersons_Person2Id",
|
||||
column: x => x.Person2Id,
|
||||
principalTable: "GanjoorRelatedPersons",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "GanjoorPersonRelations",
|
||||
columns: table => new
|
||||
{
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Person1Id = table.Column<int>(type: "int", nullable: false),
|
||||
Person2Id = table.Column<int>(type: "int", nullable: false),
|
||||
RelationType = table.Column<int>(type: "int", nullable: false),
|
||||
DegreeHint = table.Column<int>(type: "int", nullable: true),
|
||||
Note = table.Column<string>(type: "nvarchar(max)", nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_GanjoorPersonRelations", x => x.Id);
|
||||
table.ForeignKey(
|
||||
name: "FK_GanjoorPersonRelations_GanjoorRelatedPersons_Person1Id",
|
||||
column: x => x.Person1Id,
|
||||
principalTable: "GanjoorRelatedPersons",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
table.ForeignKey(
|
||||
name: "FK_GanjoorPersonRelations_GanjoorRelatedPersons_Person2Id",
|
||||
column: x => x.Person2Id,
|
||||
principalTable: "GanjoorRelatedPersons",
|
||||
principalColumn: "Id",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_GanjoorPersonAffiliations_Person1Id",
|
||||
table: "GanjoorPersonAffiliations",
|
||||
column: "Person1Id");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_GanjoorPersonAffiliations_Person2Id",
|
||||
table: "GanjoorPersonAffiliations",
|
||||
column: "Person2Id");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_GanjoorPersonRelations_Person1Id",
|
||||
table: "GanjoorPersonRelations",
|
||||
column: "Person1Id");
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_GanjoorPersonRelations_Person2Id",
|
||||
table: "GanjoorPersonRelations",
|
||||
column: "Person2Id");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "GanjoorPersonAffiliations");
|
||||
|
||||
migrationBuilder.DropTable(
|
||||
name: "GanjoorPersonRelations");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "FamilyTreeCaption",
|
||||
table: "GanjoorRelatedPersons");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "SuggestedPersonGraphJson",
|
||||
table: "GanjoorPoemGeoDateTagCorrection");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1399,6 +1399,67 @@ namespace RMuseum.Migrations
|
||||
b.ToTable("GanjoorPageSnapshots");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorPersonAffiliation", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<int>("AffiliationType")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<string>("Note")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<int>("Person1Id")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("Person2Id")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("Person1Id");
|
||||
|
||||
b.HasIndex("Person2Id");
|
||||
|
||||
b.ToTable("GanjoorPersonAffiliations");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorPersonRelation", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
||||
|
||||
b.Property<int?>("DegreeHint")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<string>("Note")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<int>("Person1Id")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("Person2Id")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<int>("RelationType")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("Person1Id");
|
||||
|
||||
b.HasIndex("Person2Id");
|
||||
|
||||
b.ToTable("GanjoorPersonRelations");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorPoem", b =>
|
||||
{
|
||||
b.Property<int>("Id")
|
||||
@ -1667,6 +1728,9 @@ namespace RMuseum.Migrations
|
||||
b.Property<double?>("SuggestedLongitude")
|
||||
.HasColumnType("float");
|
||||
|
||||
b.Property<string>("SuggestedPersonGraphJson")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("SuggestionNote")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
@ -2205,6 +2269,9 @@ namespace RMuseum.Migrations
|
||||
b.Property<string>("Description")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("FamilyTreeCaption")
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<bool>("MachineGenerated")
|
||||
.HasColumnType("bit");
|
||||
|
||||
@ -5219,6 +5286,44 @@ namespace RMuseum.Migrations
|
||||
b.Navigation("MadeObsoleteByUser");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorPersonAffiliation", b =>
|
||||
{
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorRelatedPerson", "Person1")
|
||||
.WithMany()
|
||||
.HasForeignKey("Person1Id")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorRelatedPerson", "Person2")
|
||||
.WithMany()
|
||||
.HasForeignKey("Person2Id")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Person1");
|
||||
|
||||
b.Navigation("Person2");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorPersonRelation", b =>
|
||||
{
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorRelatedPerson", "Person1")
|
||||
.WithMany()
|
||||
.HasForeignKey("Person1Id")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorRelatedPerson", "Person2")
|
||||
.WithMany()
|
||||
.HasForeignKey("Person2Id")
|
||||
.OnDelete(DeleteBehavior.Restrict)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Person1");
|
||||
|
||||
b.Navigation("Person2");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("RMuseum.Models.Ganjoor.GanjoorPoem", b =>
|
||||
{
|
||||
b.HasOne("RMuseum.Models.Ganjoor.GanjoorCat", "Cat")
|
||||
|
||||
@ -3925,6 +3925,16 @@
|
||||
People tags
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.GanjoorPersonRelations">
|
||||
<summary>
|
||||
approved kinship edges between people (family tree) - see GanjoorPersonRelation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.GanjoorPersonAffiliations">
|
||||
<summary>
|
||||
approved non-family ties between people (e.g. minister-to-king) - see GanjoorPersonAffiliation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.DbContext.RMuseumDbContext.Books">
|
||||
<summary>
|
||||
Books (PDF Library)
|
||||
@ -4748,6 +4758,18 @@
|
||||
<member name="M:RMuseum.Migrations.AddPoemGeoSuggestion.BuildTargetModel(Microsoft.EntityFrameworkCore.ModelBuilder)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:RMuseum.Migrations.FamilyTreeModels">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:RMuseum.Migrations.FamilyTreeModels.Up(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:RMuseum.Migrations.FamilyTreeModels.Down(Microsoft.EntityFrameworkCore.Migrations.MigrationBuilder)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:RMuseum.Migrations.FamilyTreeModels.BuildTargetModel(Microsoft.EntityFrameworkCore.ModelBuilder)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Accounting.DonationExpenditure">
|
||||
<summary>
|
||||
donation expenditures
|
||||
@ -9119,6 +9141,105 @@
|
||||
Prosody and Statistics
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.GanjoorPersonAffiliation">
|
||||
<summary>
|
||||
an approved non-family tie between two people (GanjoorRelatedPerson rows) - e.g. a minister
|
||||
serving a king. Kept separate from GanjoorPersonRelation (kinship) rather than folded into
|
||||
it: this is what lets two unrelated family trees show up as adjacent to each other (e.g.
|
||||
browsing the Barmakid tree surfaces a link out to the Abbasid tree via a shared minister)
|
||||
without treating "family tree" as its own entity to be linked - the tie is between the two
|
||||
people, and the tree-to-tree adjacency is just what falls out of rendering it that way.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonAffiliation.Id">
|
||||
<summary>
|
||||
record id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonAffiliation.Person1Id">
|
||||
<summary>
|
||||
first person in the tie - for a directional type (Minister, Advisor, Courtier, Patron)
|
||||
this is the one in the subordinate/serving role; for a symmetric one (Ally, Rival) order
|
||||
doesn't matter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonAffiliation.Person1">
|
||||
<summary>
|
||||
first person (navigation)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonAffiliation.Person2Id">
|
||||
<summary>
|
||||
second person in the tie - for a directional type this is the one being served
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonAffiliation.Person2">
|
||||
<summary>
|
||||
second person (navigation)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonAffiliation.AffiliationType">
|
||||
<summary>
|
||||
the kind of tie between Person1 and Person2
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonAffiliation.Note">
|
||||
<summary>
|
||||
free-text note (e.g. sourcing/reasoning, or what the tie actually is when AffiliationType is Other)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.GanjoorPersonRelation">
|
||||
<summary>
|
||||
an approved kinship edge between two people (GanjoorRelatedPerson rows) - the live/materialized
|
||||
counterpart of a pending suggestion, which travels as JSON on GanjoorPoemGeoDateTagCorrection's
|
||||
SuggestedPersonGraphJson until it's approved and turned into rows here. The graph as a whole
|
||||
(all rows in this table) is a general kinship graph, not a strict tree - see PersonRelationType.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonRelation.Id">
|
||||
<summary>
|
||||
record id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonRelation.Person1Id">
|
||||
<summary>
|
||||
first person in the relation - for a directional relation type (Parent, Ancestor) this is
|
||||
the parent/ancestor side; for a symmetric one (Sibling, Spouse) order doesn't matter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonRelation.Person1">
|
||||
<summary>
|
||||
first person (navigation)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonRelation.Person2Id">
|
||||
<summary>
|
||||
second person in the relation - for a directional relation type (Parent, Ancestor) this is
|
||||
the child/descendant side
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonRelation.Person2">
|
||||
<summary>
|
||||
second person (navigation)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonRelation.RelationType">
|
||||
<summary>
|
||||
the kind of relation between Person1 and Person2
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonRelation.DegreeHint">
|
||||
<summary>
|
||||
for RelationType == Ancestor, an optional known exact degree (e.g. 2 for "grandparent",
|
||||
3 for "great-grandparent") - left null when only the relative order is known, not the
|
||||
exact number of generations in between. Not used for other relation types.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPersonRelation.Note">
|
||||
<summary>
|
||||
free-text note (e.g. sourcing/reasoning for this relation)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.GanjoorPoem">
|
||||
<summary>
|
||||
Ganjoor Poem
|
||||
@ -9646,7 +9767,8 @@
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPoemGeoDateTagCorrection.PersonId">
|
||||
<summary>
|
||||
related person id (existing, approved GanjoorRelatedPerson only - no suggestion path for new people yet)
|
||||
related person id - an existing, already approved GanjoorRelatedPerson. Set this OR
|
||||
SuggestedPersonGraphJson below, not both (same pattern as LocationId/Suggested* above).
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPoemGeoDateTagCorrection.Person">
|
||||
@ -9654,6 +9776,35 @@
|
||||
related person (navigation)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPoemGeoDateTagCorrection.SuggestedPersonGraphJson">
|
||||
<summary>
|
||||
a brand new, not yet approved person (and optionally that person's relatives/relations,
|
||||
which may themselves be new people) - serialized JSON rather than its own set of
|
||||
correction tables, because a single suggestion can introduce several interlinked new
|
||||
people at once (e.g. "add this person, and their father, and the relation between them")
|
||||
and a new person referencing another not-yet-existing new person has no real id to point
|
||||
at until the whole graph is approved together. Expected shape (local keys are only used
|
||||
to resolve relations within this same submission and never stored beyond approval time):
|
||||
{
|
||||
"person": { "localKey": "p1", "existingPersonId": null, "name": "...", "description": "...",
|
||||
"wikiUrl": "...", "birthYearInLHijri": null, "deathYearInLHijri": null,
|
||||
"validBirthDate": false, "validDeathDate": false,
|
||||
"birthLocationId": null, "deathLocationId": null,
|
||||
"familyTreeCaption": null },
|
||||
"relatedPeople": [ { "localKey": "p2", "existingPersonId": 42, ... } ],
|
||||
"relations": [ { "kind": "family", "person1": "p1", "person2": "p2", "relationType": "Parent",
|
||||
"degreeHint": null, "note": "..." },
|
||||
{ "kind": "affiliation", "person1": "p2", "person2": "p3",
|
||||
"affiliationType": "Minister", "note": "..." } ]
|
||||
}
|
||||
"person" is the node that ends up assigned to PersonId once approved. Only set when
|
||||
PersonId above is null. Each entry in "relations" carries a "kind" discriminator so one
|
||||
submission can suggest both kinship edges (materialized as GanjoorPersonRelation,
|
||||
"relationType" against PersonRelationType) and non-family ties (materialized as
|
||||
GanjoorPersonAffiliation, "affiliationType" against PersonAffiliationType) at once - e.g.
|
||||
introducing a person along with both their father and the king they served.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorPoemGeoDateTagCorrection.IgnoreInCategory">
|
||||
<summary>
|
||||
if true, this tag is excluded from category/poet-level map aggregation (e.g. a place mentioned only
|
||||
@ -10631,6 +10782,15 @@
|
||||
AI generated
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.Ganjoor.GanjoorRelatedPerson.FamilyTreeCaption">
|
||||
<summary>
|
||||
optional caption for the family tree this person is treated as the root of (e.g.
|
||||
"ساسانیان", "آل برمک") - purely a display label for whoever a tree is being browsed
|
||||
from; nothing enforces that this person actually has no recorded ancestors themselves,
|
||||
and most people will leave this null (only whichever person a tree is "named after"
|
||||
needs one set).
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.GanjoorSiteBanner">
|
||||
<summary>
|
||||
ganjoor.net site banner
|
||||
@ -11123,6 +11283,83 @@
|
||||
summary review result
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.PersonAffiliationType">
|
||||
<summary>
|
||||
the kind of non-family tie a GanjoorPersonAffiliation represents between two people - e.g.
|
||||
a minister serving a king, an advisor, a patron. Unlike PersonRelationType this has nothing
|
||||
to do with kinship; it's what lets two otherwise unrelated family trees show up as adjacent
|
||||
(e.g. "some Barmakids served the Abbasid court") without merging them into one tree. New
|
||||
values can be appended safely later (stored as int) as more cases come up.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonAffiliationType.Minister">
|
||||
<summary>
|
||||
Person1 served as minister/vizier to Person2
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonAffiliationType.Advisor">
|
||||
<summary>
|
||||
Person1 was an advisor/counselor to Person2, without holding a formal ministerial post
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonAffiliationType.Courtier">
|
||||
<summary>
|
||||
Person1 was a courtier/attendant/servant of Person2 (a catch-all for court-affiliated
|
||||
roles not covered by a more specific type)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonAffiliationType.Patron">
|
||||
<summary>
|
||||
Person1 was a patron/sponsor of Person2 (e.g. a king patronizing a poet)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonAffiliationType.Ally">
|
||||
<summary>
|
||||
Person1 and Person2 were allies (symmetric - order doesn't matter)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonAffiliationType.Rival">
|
||||
<summary>
|
||||
Person1 and Person2 were rivals/enemies (symmetric - order doesn't matter)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonAffiliationType.Other">
|
||||
<summary>
|
||||
doesn't fit any of the above - rely on Note for what the tie actually is
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.PersonRelationType">
|
||||
<summary>
|
||||
the kind of kinship edge a GanjoorPersonRelation represents between two GanjoorRelatedPerson
|
||||
rows. The graph is not a strict tree - siblings can be known without their parents, an
|
||||
ancestor can be known without the exact number of generations in between, etc. - so this is
|
||||
a small, deliberately open set rather than a rigid parent/child-only model.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonRelationType.Parent">
|
||||
<summary>
|
||||
Person1 is a parent of Person2 (directional - the mirror "child" relation is implied,
|
||||
not stored as a second row)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonRelationType.Sibling">
|
||||
<summary>
|
||||
Person1 and Person2 are siblings (symmetric - order doesn't matter). Doesn't require
|
||||
either parent to be known/recorded.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonRelationType.Spouse">
|
||||
<summary>
|
||||
Person1 and Person2 are spouses (symmetric - order doesn't matter)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:RMuseum.Models.Ganjoor.PersonRelationType.Ancestor">
|
||||
<summary>
|
||||
Person1 is a known ancestor of Person2 (directional) but the exact number of generations
|
||||
between them is not known/recorded - see GanjoorPersonRelation.DegreeHint for the case
|
||||
where the exact degree (e.g. "grandparent") IS known
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.Ganjoor.PoemGeoDateTag">
|
||||
<summary>
|
||||
Geo + date tags for poems
|
||||
|
||||
Loading…
Reference in New Issue
Block a user