From 604cb075cd909d2b6bbc4ffef392c83148cd3199 Mon Sep 17 00:00:00 2001
From: naath
Date: Fri, 11 Apr 2014 17:44:37 +0100
Subject: [PATCH] changed graphs to manual dot file; added pictures; faffed
about with text
---
cgiFiles/ancestorGraph.py | 101 +-
cgiFiles/bigGraph.py | 78 +-
cgiFiles/everyPage.py | 33 +-
cgiFiles/jointAncestorGraph.py | 62 +-
cgiFiles/make_dot.py | 177 ++
cgiFiles/searchname.py | 41 +
cgiFiles/smallGraph.py | 97 +-
familyTree/askQuestion.py | 283 ++-
familyTree/makeTables.py | 3 +-
familyTree/text2SQL.py | 15 +-
familyTree/tree | 4146 +++++++++++++++++++++++++++++++-
familyTree/tree.db | Bin 71680 -> 93184 bytes
12 files changed, 4689 insertions(+), 347 deletions(-)
create mode 100755 cgiFiles/make_dot.py
create mode 100755 cgiFiles/searchname.py
diff --git a/cgiFiles/ancestorGraph.py b/cgiFiles/ancestorGraph.py
index a0e291d..36a9bf3 100755
--- a/cgiFiles/ancestorGraph.py
+++ b/cgiFiles/ancestorGraph.py
@@ -5,92 +5,59 @@ import cgitb
cgitb.enable()
import sys
sys.path.append('/home/naath/familyTreeProject/familyTree')
-import pygraph
-from pygraph.classes.graph import graph
-from pygraph.classes.digraph import digraph
-from pygraph.algorithms.searching import breadth_first_search
-from pygraph.readwrite.dot import write
-import gv
-import StringIO
import askQuestion
+import make_dot as d
-def add_quotes(s):
- s = str(s)
- return '\"'+s+'\"'
-
-def parents(ID,name,gr,attr,couples):
+def parents(ID,name):
findParents = "SELECT Name,parentID FROM parents LEFT JOIN"\
+" people ON people.id=parents.parentid"\
+" WHERE parents.id=?;"
-
- ps = ();
- for row in askQuestion.run_query(findParents,(ID,)):
- if row[0]!=None:
- thisN = row[0] + ' '+str(row[1])
- ps = ps + (thisN,)
- if not gr.has_node(thisN):
- gr.add_node(thisN,attr)
- if not gr.has_edge((thisN,name)):
- gr.add_edge((thisN,name))
- newName = thisN
- newID = row[1]
- [gr, couples] = \
- parents(newID,newName,gr,attr,couples)
-
- else:
- thisN = row[1] + ' p' + str(ID)
- if not gr.has_node(thisN):
- ps = ps + (thisN,)
- gr.add_node(thisN,attr)
- gr.add_edge((thisN,name))
- if len(ps)==2:
- if not gr.has_edge(ps):
- gr.add_edge(ps)
- gr.add_edge_attributes(ps,[('dir','none')])
- couples.append(ps)
- return [gr, couples]
-def make_graph(ID,conn):
-
- # Graph creation
- gr = digraph()
- attr = [('fontsize',8)]
- # Add nodes and edges
+ pair =[]
+ for row in askQuestion.run_query(findParents,(ID,)):
+ if row[0]!=None:
+ thisN = row[0] + ' '+str(row[1])
+ newName = thisN
+ newID = row[1]
+ if not d.has_node(thisN):
+ d.add_person(thisN)
+ parents(newID,newName)
+ pair.append(thisN)
- couples = [];
- s = "SELECT name, id FROM people WHERE ID = ?;"
- for row in askQuestion.run_query(s,(ID,)):
- gr.add_node(row[0],attr)
- newName = (row[0])
- newID = row[1]
+ else:
+ thisN = row[1] + ',p ' + str(ID)
+ pair.append(thisN)
+ d.add_person(thisN)
+ d.add_marriage(pair[0],pair[1],[name],1)
+
+def make_graph(ID,conn):
+ global allAncestors
- [gr,couples] = parents(newID,newName,gr,attr,couples)
+ d.start_dot()
+
+ [out, allAncestors,trackLevel,aDict] = \
+ askQuestion.all_ancestors(ID,'\n')
+ Self = allAncestors[0]
- #Draw as jpg
- dot = write(gr)
+ s = "SELECT name||', '|| id FROM people WHERE ID=?"
+ t = (Self,)
+ for row in askQuestion.run_query(s,t):
+ Self = row[0]
+ d.add_highlight(Self)
- dot = dot[:-2]
+ parents(allAncestors[0],Self)
- for couple in couples:
- n1 = add_quotes(couple[0])
- n2 = add_quotes(couple[1])
- line = "\n{rank=same "+n1 + ' '\
- +n2 + "}"
- dot = dot + line
- dot = dot + '\n}'
+ d.add_subgraphs()
+ d.end_dot()
- gvv = gv.readstring(dot)
- gv.layout(gvv,'dot')
+ d.render_dot()
- format = 'jpg'
- print "Content-type: image/" + format + "\n"
- print gv.render(gvv,format)
askQuestion.close(conn)
form = cgi.FieldStorage()
diff --git a/cgiFiles/bigGraph.py b/cgiFiles/bigGraph.py
index e5304e9..35d2b33 100755
--- a/cgiFiles/bigGraph.py
+++ b/cgiFiles/bigGraph.py
@@ -4,14 +4,8 @@ import cgi
import cgitb
import sys
sys.path.append('/home/naath/familyTreeProject/familyTree')
-import pygraph
-from pygraph.classes.graph import graph
-from pygraph.classes.digraph import digraph
-from pygraph.algorithms.searching import breadth_first_search
-from pygraph.readwrite.dot import write
-import gv
-import StringIO
import askQuestion
+import make_dot as d
def add_quotes(s):
s = str(s)
@@ -24,69 +18,33 @@ conn = askQuestion.connect()
famTree = askQuestion.list_people_parents()
-gr = digraph()
-
-couples = []
-
-attr = [('fontsize',8)]
-
+d.start_dot()
for i in range(len(famTree)):
+#for i in range(200):
self = famTree[i][0]
- if not gr.has_node(self):
- gr.add_node(self,attr)
+ d.add_person(self)
- for j in range(len(famTree[i][2])):
- s = famTree[i][2][j]
- ps = (self,s)
-
- if not gr.has_node(s):
- gr.add_node(s,attr)
- a =1
- if not gr.has_edge(ps):
- gr.add_edge(ps)
- a = ['dir','none']
- gr.add_edge_attribute(ps,a)
- couples.append(ps)
- ps = ()
+ ps = []
for j in range(len(famTree[i][1])):
p = famTree[i][1][j]
- if p !='?':
- ps = ps + (str(p),)
- if not gr.has_node(p):
- gr.add_node(p,attr)
- if not gr.has_edge((p,self)):
- gr.add_edge((p,self))
-
- if len(ps)==2 and not gr.has_edge(ps) \
- and not gr.has_edge((ps[1],ps[0])):
- gr.add_edge(ps)
- a = ['dir','none']
- gr.add_edge_attribute(ps,a)
- couples.append(ps)
-
-dot = write(gr)
+ ps.append(str(p))
-dot = write(gr)
-dot = dot[:-2]
+ if len(ps)==2:
+ d.add_marriage(ps[0],ps[1],[self],0)
+ d.add_subgraph(ps)
-for couple in couples:
- line = "\n{rank=same "+add_quotes(couple[0]) + ' '\
- +add_quotes(couple[1])+"}"
- dot = dot + line
-
-dot = dot + '\n}'
-
-
-gvv = gv.readstring(dot)
-format='dot'
-gv.layout(gvv,format)
+ for j in range(len(famTree[i][2])):
+ s = famTree[i][2][j]
+ ps = (self,s)
-format = "jpg"
-print "Content-type: image/" + format + "\n"
-print gv.render(gvv,format)
+ d.add_person(s)
+ d.add_marriage(self,s,[],0)
+ d.add_subgraph(ps)
-#gv.render(gvv,'png','famTree.png')
+d.add_subgraphs()
+d.end_dot()
+d.render_dot()
askQuestion.close(conn)
diff --git a/cgiFiles/everyPage.py b/cgiFiles/everyPage.py
index 9f2d622..413b873 100755
--- a/cgiFiles/everyPage.py
+++ b/cgiFiles/everyPage.py
@@ -13,18 +13,21 @@ def base_url():
def links():
print '
'
- print ' list of people'
- print '
'
- print ' list of territories'
- print '
'
- print ' count how many times first names are use'
- print '
'
- print ' At what age did people have children'
- print '
'
- print ' At what age did people die'
- print '
'
- print ' big graph'
-
+ print ''
print '
'
def footer():
print '
'
@@ -61,6 +64,12 @@ def html_start(titleNum):
print ""
print ""
print ""+ title(titleNum) +""
+
+ print ""
+
print ""
print ""
page_header()
diff --git a/cgiFiles/jointAncestorGraph.py b/cgiFiles/jointAncestorGraph.py
index cbcdc1e..099f042 100755
--- a/cgiFiles/jointAncestorGraph.py
+++ b/cgiFiles/jointAncestorGraph.py
@@ -5,16 +5,10 @@ import cgitb
cgitb.enable()
import sys
sys.path.append('/home/naath/familyTreeProject/familyTree')
-import pygraph
-from pygraph.classes.graph import graph
-from pygraph.classes.digraph import digraph
-from pygraph.algorithms.searching import breadth_first_search
-from pygraph.readwrite.dot import write
-import gv
-import StringIO
+import make_dot as d
import askQuestion
-def parents(ID,name,gr,attr,startLevel,stopLevel):
+def parents(ID,name,startLevel,stopLevel):
findParents = "SELECT Name,parentID FROM parents LEFT JOIN"\
+" people ON people.id=parents.parentid"\
@@ -22,60 +16,54 @@ def parents(ID,name,gr,attr,startLevel,stopLevel):
startLevel = startLevel + 1
if int(startLevel) == int(stopLevel)+1:
- return gr
+ return
+ pair=[]
for row in askQuestion.run_query(findParents,(ID,)):
if row[0]!=None:
thisN = row[0] + ' '+str(row[1])
- if not gr.has_node(thisN):
- gr.add_node(thisN,attr)
- if gr.has_edge((thisN,name)):
- return gr
- gr.add_edge((thisN,name))
+
+ pair.append(thisN)
newName = thisN
newID = row[1]
- gr = parents(newID,newName,gr,attr,startLevel,stopLevel)
+ if not d.has_node(thisN):
+ d.add_person(thisN)
+ parents(newID,newName,startLevel,stopLevel)
else:
- if not gr.has_node(row[1]):
- gr.add_node(row[1],attr)
- gr.add_edge((row[1],name))
- return gr
+ thisN = row[1] + ',p ' + str(ID)
+ pair.append(thisN)
+ d.add_person(thisN)
-def make_graph(ID,ID2,LA,LB):
- # Graph creation
- gr = digraph()
- attr = [('fontsize',8)]
- # Add nodes and edges
+
+ d.add_marriage(pair[0], pair[1],[name],1)
+
+def make_graph(ID,ID2,LA,LB):
+
+ d.start_dot()
if int(LA)!=0:
s = "SELECT name, id FROM people WHERE ID = ?;"
for row in askQuestion.run_query(s,(ID,)):
thisN = row[0]+' ' + str(row[1])
- gr.add_node(thisN,attr)
+ d.add_highlight(thisN)
newName = (thisN)
newID = row[1]
- gr = parents(newID,newName,gr,attr,0,LA)
+ parents(newID,newName,0,LA)
if int(LB)!=0:
s = "SELECT name, id FROM people WHERE ID = ?;"
for row in askQuestion.run_query(s,(ID2,)):
thisN = row[0] +' '+ str(row[1])
- gr.add_node(thisN,attr)
+ d.add_highlight(thisN)
newName = (thisN)
newID = row[1]
+ parents(newID,newName,0,LB)
- gr = parents(newID,newName,gr,attr,0,LB)
-
- #Draw as jpg
- dot = write(gr)
- gvv = gv.readstring(dot)
- gv.layout(gvv,'dot')
-
- format = 'jpg'
- print "Content-type: image/" + format + "\n"
- print gv.render(gvv,format)
+ d.add_subgraphs()
+ d.end_dot()
+ d.render_dot()
askQuestion.close(conn)
form = cgi.FieldStorage()
diff --git a/cgiFiles/make_dot.py b/cgiFiles/make_dot.py
new file mode 100755
index 0000000..9c9e20b
--- /dev/null
+++ b/cgiFiles/make_dot.py
@@ -0,0 +1,177 @@
+#!/usr/bin/python
+
+import cgi
+import cgitb
+import gv
+import re
+
+cgitb.enable()
+def add_quotes(s):
+ return '\"'+str(s)+'\"'
+
+def add_node(node,node_attr):
+ global dot
+ global nodes
+ node_attr = attr_string(node_attr)
+ if node not in nodes:
+ dot = dot + add_quotes(node) + node_attr + ";\n"
+ nodes.append(node)
+
+def has_node(node):
+ if node in nodes:
+ return 1
+ else:
+ return 0
+def has_edge(edge):
+ edge[0] = add_quotes(edge[0])
+ edge[1] = add_quotes(edge[1])
+ if edge in edges:
+ return 1
+ else:
+ return 0
+
+def add_edge(n1,n2,edge_attr):
+ global dot
+ global edges
+ edge = (add_quotes(n1),add_quotes(n2))
+ edge_attr = attr_string(edge_attr)
+ if edge not in edges:
+ dot = dot + edge[0] + ' -> ' + edge[1] + edge_attr + ";"
+ edges.append(edge)
+
+def add_arrow(n1,n2):
+ add_edge(n1,n2,edge_attr)
+
+def add_no_arrow(n1,n2):
+ add_edge(n1,n2,nodir_attr)
+
+def add_marriage(n1,n2,children,joinChildren):
+ global cNodes
+
+ jN = n1+n2
+ jNRev = n2+n1
+ if has_node(jNRev):
+ jN = jNRev
+ add_spot(jN)
+ add_person(n1)
+ add_person(n2)
+
+
+
+ if len(children)>0 and joinChildren==1:
+ cNode = jN + 'c'
+ e = [cNode,children[0]]
+ if has_node(cNode):
+ tcNode = cNode + children[0]
+ if len(cNodes[cNode])>0:
+ last = cNodes[cNode][-1]
+ else:
+ last = cNode
+ add_spot(tcNode)
+ cNodes[cNode].append(tcNode)
+ add_no_arrow(last,tcNode)
+ add_subgraph([tcNode,cNode])
+ else:
+ tcNode = cNode
+ add_spot(cNode)
+ cNodes[cNode] = []
+ add_no_arrow(jN,cNode)
+
+ elif len(children)>0:
+ tcNode = jN
+
+ for c in children:
+ add_person(c)
+ add_arrow(tcNode,c)
+ for n in [n1, n2]:
+ add_edge(n,jN,marriage_attr)
+ add_subgraph([n1,n2])
+
+
+def add_subgraph(myG):
+ global subgraphs
+ subgraphs.append(myG)
+
+def add_subgraphs():
+ global dot
+ for sg in subgraphs:
+ line = "\n{rank=same "
+
+ for n in sg:
+ line = line +add_quotes(n) + ' '
+
+ line = line +"}"
+
+ dot = dot + line
+
+def end_dot():
+ global dot
+ dot = dot + "}"
+
+def start_dot():
+ global dot
+ global nodes
+ global edges
+ global subgraphs
+ global cNodes
+ nodes=[]
+ edges=[]
+ cNodes={}
+ dot = "digraph G{\n"
+ dot = dot + "ranksep = 0.5 nodesep = 0\n"
+ subgraphs=[]
+ set_attr()
+
+def add_highlight(name):
+ add_node(name,highlight_attr)
+
+def add_person(name):
+ add_node(name,person_attr)
+
+def add_spot(name):
+ add_node(name,spot_attr)
+
+
+def set_attr():
+ global person_attr
+ global highlight_attr
+ global spot_attr
+ global edge_attr
+ global invis_attr
+ global ignored_attr
+ global nodir_attr
+ global marriage_attr
+ global debug_attr
+ global debug_edge_attr
+ zero_size = [('width','0'),('height','0')]
+ person_attr = [('fontsize','8'),('shape','plaintext')] + zero_size
+ highlight_attr = person_attr + \
+ [('fontcolor','red'),('shape','box'),('color','red')]
+ debug_attr = person_attr + [('fontcolor','green')]
+ spot_attr = [('shape','point')] + zero_size
+ edge_attr = [('len','0'),('arrowsize','0.5')]
+ debug_edge_attr = edge_attr + [('color','green')]
+ invis_attr = edge_attr + [('style','invis')]
+ nodir_attr = edge_attr + [('dir','none')]
+ marriage_attr = nodir_attr + [('weight','10'),('color','red')]
+ ignored_attr =edge_attr + [('constraint','false')] + nodir_attr
+
+def attr_string(attr):
+
+ attr_str = '['
+ for a in attr:
+ attr_str = attr_str + a[0] + '=' + a[1]
+ if a != attr[-1]:
+ attr_str = attr_str +','
+
+ attr_str = attr_str + ']'
+ return attr_str
+
+def render_dot():
+ gvv = gv.readstring(dot)
+ gv.layout(gvv,'dot')
+
+ format = 'png'
+
+ print "Content-type: image/" + format + "\n"
+ print gv.render(gvv,format)
diff --git a/cgiFiles/searchname.py b/cgiFiles/searchname.py
new file mode 100755
index 0000000..c798321
--- /dev/null
+++ b/cgiFiles/searchname.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+# enable debugging
+import cgi
+import cgitb
+import sys
+import re
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import askQuestion
+import everyPage
+
+cgitb.enable()
+
+[conn,form]=everyPage.top()
+
+name = form.getvalue('name')
+if name == None:
+ printMe = ""
+
+ everyPage.good(printMe)
+
+
+else:
+ result = re.match('[a-zA-z-% ]*$', name)
+
+ if result == None:
+ everyPage.bad()
+ else:
+ printMe = askQuestion.search_name(name,'
')
+ if len(printMe)<10:
+ printMe = 'sorry, no data
'
+
+ everyPage.good(printMe)
+
+
+everyPage.bottom(conn)
diff --git a/cgiFiles/smallGraph.py b/cgiFiles/smallGraph.py
index eefee42..ee15269 100755
--- a/cgiFiles/smallGraph.py
+++ b/cgiFiles/smallGraph.py
@@ -2,93 +2,41 @@
import cgi
import cgitb
-
-import pygraph
-from pygraph.classes.graph import graph
-from pygraph.classes.digraph import digraph
-from pygraph.algorithms.searching import breadth_first_search
-from pygraph.readwrite.dot import write
-import gv
-import StringIO
+import make_dot as d
cgitb.enable()
-def add_quotes(s):
- return '\"'+str(s)+'\"'
-
def make_graph(Self,parents,children,otherparents,spouses):
- # Graph creation
- gr = digraph()
-
- node_attr = [('fontsize',8)]
-
- # Add nodes and edges
- gr.add_node(Self,node_attr)
+ d.start_dot()
+ d.add_highlight(Self)
+
+ countSame = 2;
+ for i in range(1,len(parents)):
+ if parents[i]==parents[i-1]:
+ parents[1]=parents[1] + ' '+str(countSame)
+ countSame = countSame +1
- for p in parents:
- if not gr.has_node(p):
- gr.add_node(p,node_attr)
- if not gr.has_edge((p,Self)):
- gr.add_edge((p,Self))
-
- couples=[]
- if len(parents)==2:
- ps = (parents[0],parents[1])
- if not gr.has_edge(ps):
- gr.add_edge(ps)
- attr = [('dir','none')]
- gr.add_edge_attributes(ps,attr)
- couples.append(ps)
+ d.add_marriage(parents[0],parents[1],[Self],1)
- for i in range(len(children)):
- if not gr.has_node(children[i]):
- gr.add_node(children[i],node_attr)
- if not gr.has_edge ((Self,children[i])):
- gr.add_edge((Self,children[i]))
- if not gr.has_node(otherparents[i]):
- gr.add_node(otherparents[i],node_attr)
- if not gr.has_edge((otherparents[i],children[i])):
- gr.add_edge((otherparents[i],children[i]))
+ for i in range(len(otherparents)):
+ c = children[i]
+ op = otherparents[i]
+ d.add_marriage(Self,op,[c],1)
-
- if not gr.has_edge((otherparents[i],Self)):
- e = (otherparents[i],Self)
- attr = [('dir','none')]
- gr.add_edge(e)
- gr.add_edge_attributes(e,attr)
- couples.append(e)
+ for i in range(len(spouses)):
+ s = spouses[i]
+ d.add_marriage(Self,s,[],1)
- for s in spouses:
- if not gr.has_node(s):
- gr.add_node(s,node_attr)
- if not gr.has_edge((s,Self)):
- e = (s,Self)
- attr = [('dir','none')]
- gr.add_edge(e)
- gr.add_edge_attributes(e,attr)
- couples.append(e)
+ d.subgraphs.append(children)
-
- #Draw as jpg
- dot = write(gr)
- dot = dot[:-2]
+ d.add_subgraphs()
- for couple in couples:
- line = "\n{rank=same "+add_quotes(couple[0]) + ' '\
- +add_quotes(couple[1])+"}"
-
- dot = dot + line
-
- dot = dot + '\n}'
- gvv = gv.readstring(dot)
- gv.layout(gvv,'dot')
-
- format = 'jpg'
+ d.end_dot()
+
+ d.render_dot()
- print "Content-type: image/" + format + "\n"
- print gv.render(gvv,format)
form = cgi.FieldStorage()
@@ -99,4 +47,3 @@ op = form.getlist('op')
s = form.getlist('s')
make_graph(Self,p,c,op,s)
-
diff --git a/familyTree/askQuestion.py b/familyTree/askQuestion.py
index d841441..841df2f 100755
--- a/familyTree/askQuestion.py
+++ b/familyTree/askQuestion.py
@@ -5,7 +5,13 @@ import findYear
from string import Template
global link_Template
-link_Template= Template("$text")
+link_Template= Template(\
+ "$text")
+def add_quotes(s):
+ s = str(s)
+ return "'"+s+"'"
+
def run_query(s,t):
c = make_cursor()
return c.execute(s,t)
@@ -39,15 +45,54 @@ def print_tagged_query(relationship,s,t,newLine):
def relationship_html(ID,ID2,newLine):
if newLine=='
':
relationship = common_ancestors(ID,ID2,newLine)[2]
- script = "ancestors.py?ID="+str(ID)+"&ID2="+str(ID2)
- url = link_Template.substitute(script = script,text = "Common ancestors")
- return relationship + ' '+url + newLine
+
+ if relationship[-11:] != 'not related':
+ script = "ancestors.py?ID="+str(ID)+"&ID2="+str(ID2)
+ url = link_Template.substitute\
+ (script = script,title = "Common ancestors"\
+ ,text = "Common ancestors")
+ return relationship + ' '+url + newLine
+ else:
+ return relationship + newLine
else:
return ''
-def terr_html(terr,newLine):
+def terr_html(terr,newLine,start,stop):
if newLine=='
':
- return link_Template.substitute(script = "territory.py?terr="+terr, text=terr)
+ if start == 0 and stop ==0:
+ myTitle = add_quotes(terr)
+
+ else:
+ s = "SELECT name,people.id"\
+ +" FROM people INNER JOIN territories"\
+ +" ON people.id = territories.id"\
+ +" WHERE territory = ? AND stopyear <= ?"\
+ +" ORDER BY startyear DESC;"
+
+ t = (terr,start)
+ myTitle = ''
+ for row in run_query(s,t):
+ myTitle = myTitle +"previous - " + row[0] \
+ + ',' + str(row[1])
+ break
+
+ u = "SELECT name,people.id"\
+ +" FROM people INNER JOIN territories"\
+ +" ON people.id = territories.id"\
+ +" WHERE territory = ? AND startyear >= ?"\
+ +" ORDER BY startyear;"
+
+ v = (terr,stop)
+ for r in run_query(u,v):
+ myTitle = myTitle + '
' +"next - " + r[0] \
+ + ',' + str(r[1])
+ break
+
+ myTitle = add_quotes(myTitle)
+
+ return link_Template.substitute(\
+ script = "territory.py?terr="+terr, title=myTitle,\
+ text = terr)
else:
return terr
def name_html(row,html):
@@ -63,7 +108,7 @@ def name_html(row,html):
script = "person.py?ID=" + str(row[1])
name = row[0]
return link_Template.substitute(script = script\
- , text = name)
+ ,title = add_quotes(name),text = name)
else:
return row[0] + "," +str(row[1])
@@ -77,7 +122,7 @@ def print_age_child_count(row,newLine):
if newLine == '
':
script = "age.py?age="+str(row[0])
link = link_Template.substitute(script = \
- script, text = row[0])
+ script, title = add_quotes(row[0]), text = row[0])
out = str(row[1])+print_people(row[1])
out = out + 'had children at age '+ link + newLine
@@ -88,7 +133,8 @@ def print_age_child_count(row,newLine):
def print_age_death_count(row,newLine):
if newLine =='
':
script = "ageDeath.py?age="+str(row[0])
- link = link_Template.substitute(script = script,text = row[0])
+ link = link_Template.substitute(script = script,\
+ title = add_quotes(row[0]),text = row[0])
out = str(row[1])+print_people(row[1])
out = out + "died at age " + link + newLine
return out
@@ -99,7 +145,7 @@ def print_name_count(row,newLine):
if newLine=='
':
script = "name.py?name=" + row[0]
link = link_Template.substitute(script =\
- script, text = row[0])
+ script, title = add_quotes(row[0]),text = row[0])
return str(row[1]) + " people called "+link + newLine
else:
return print_row(row,newLine)
@@ -168,7 +214,7 @@ def list_territories(newLine):
out = ''
for row in run_query(s,()):
- out =out + terr_html(row[0],newLine) +newLine
+ out =out + terr_html(row[0],newLine,0,0) +newLine
return out
def list_people_parents():
@@ -206,8 +252,9 @@ def list_people_parents():
if r[0]!=None:
spouses.append(r[0]+ ' '+str(r[1]))
else:
- spouses.append(r[1] + ' s' +\
- str(row[1]))
+ if len(r[1])>0:
+ spouses.append(r[1] + ' s' +\
+ str(row[1]))
myName = row[0]
@@ -315,14 +362,45 @@ def count_names(newLine):
return out
+
+def search_name(name,newLine):
+ s = "SELECT name, ID"\
+ +" FROM people"\
+ +" WHERE name LIKE ?;"
+
+ out = ''
+
+ out = out + 'Names start with ' + name + ':' + newLine
+ t = (name + '%',)
+ fullIDs=[]
+ for row in run_query(s,t):
+ out = out + name_html(row,newLine) + newLine
+ fullIDs.append(row[1])
+ t = ('%' + name + '%',)
+ out = out+newLine + 'Names contain ' + name + ':' + newLine
+ for row in run_query(s,t):
+ if row[1] not in fullIDs:
+ out = out + name_html(row,newLine) + newLine
+
+ s = "SELECT name,people.ID,style"\
+ +" FROM people INNER JOIN styles"\
+ +" ON styles.id = people.id"\
+ +" WHERE style LIKE ?;"
+ out = out +newLine+ 'Styles contain ' + name + ':' + newLine
+ for row in run_query(s,t):
+ out = out + name_html(row,newLine)+' ' + row[2] + newLine
+
+ return out
+
+
def people_with_name(name,newLine):
- s = "SELECT Name, ID"\
+ s = "SELECT name, ID"\
+" FROM people"\
- +" WHERE Name LIKE ?;"
+ +" WHERE firstname LIKE ?;"
out = ''
- t = (name + '%',)
+ t = (name,)
for row in run_query(s,t):
out = out + name_html(row,newLine) + newLine
@@ -448,27 +526,33 @@ def all_ancestors(personID,newLine):
for row in run_query(t,id):
out = out + name_html(row,newLine)+newLine
+ aDict={}
+ aDict[level] = ancestors
while len(ancestors)>0:
level = level+1
newA =[]
- thisout = newLine + parent_level(level,'parent') +':' + newLine
+ thisout = newLine + parent_level(level,'parent') +\
+ ':' + newLine
for ancestor in ancestors:
id = (ancestor,)
for row in run_query(s,id):
thisout = thisout + \
name_html(row,newLine)+newLine
- if row[1] not in allAncestors and \
- is_number(row[1])!=0:
+ if row[1] not in allAncestors\
+ and is_number(row[1]):
newA.append(row[1])
allAncestors.append(row[1])
trackLevel.append(level)
+
ancestors = newA
+ if len(ancestors)>0:
+ aDict[level]=ancestors
out = out+thisout
image = "
"
out = out+newLine + image+newLine
- return [out, allAncestors,trackLevel]
+ return [out, allAncestors,trackLevel,aDict]
def common_ancestors(IDA, IDB,newLine):
@@ -664,38 +748,52 @@ def rulers_of(aTerritory,newLine):
out = ''
for row in run_query(tq,(aTerritory+'%',)):
if row[4]!=last and last!='':
- out = out + 'Rulers of '+terr_html(last,newLine) +':'+ newLine +thisT +newLine
+ out = out + 'Rulers of '+terr_html(last,newLine,0,0) \
+ +':'+ newLine +thisT +newLine
thisT = ''
thisT = thisT +name_html(row,newLine)
thisT = thisT +' from ' + str(row[2])+' to '+str(row[3]) + newLine
last = row[4]
- out = out + 'Rulers of '+terr_html(row[4],newLine) +':'+ newLine +thisT
+ out = out + 'Rulers of '+terr_html(row[4],newLine,0,0) +':'+ \
+ newLine +thisT
return out
def person_info(personID,newLine):
t = (personID,)
- output = '';
-
+ mainDiv = ''
#Id, Name, Dates, Style, Style-Dates
s = "SELECT * FROM people WHERE ID = ?"
for row in run_query(s,t):
- output = output + 'ID: '+str(row[0]) +newLine
- output = output + print_tagged_name('Name',[row[1], row[0]],newLine) +newLine
+ mainDiv = mainDiv + ''
+ mainDiv = mainDiv + 'ID: '+str(row[0]) +newLine
+ mainDiv = mainDiv + print_tagged_name('Name',[row[1], row[0]]\
+ ,newLine)
+ mainDiv = mainDiv + '
'
name = row[1]
- output = output + 'Born: '+row[3] + newLine
+ url = row[9]
+ picture = row[10]
+
+ mainDiv = mainDiv + ''
+ mainDiv = mainDiv + newLine + 'Born: '+row[3] + newLine
bornYear = row[4]
- output = output + 'Died: '+row[5] + ", aged " \
- +str(row[6]-row[4]) +newLine
+ mainDiv = mainDiv + 'Died: '+row[5]
+
+ if row[6] != 0 and row[4] !=0:
+ mainDiv = mainDiv + ", aged " \
+ +str(row[6]-row[4])
+ mainDiv = mainDiv + '
'
+
s = "SELECT * FROM styles WHERE ID = ?"
for row in run_query(s,t):
- output = output +newLine+ 'Style: '+row[1] + newLine
+ mainDiv = mainDiv + ''
+ mainDiv = mainDiv +newLine+ 'Style: '+row[1] + newLine
- output = output + 'Territories:' + newLine
+ mainDiv = mainDiv + 'Territories:' + newLine
u = "SELECT * FROM territories"\
+" WHERE ID =? AND startYear =? AND stopYear=?"
@@ -703,23 +801,33 @@ def person_info(personID,newLine):
any = 0
for r in run_query(u,v):
- output = output + terr_html(r[1],newLine) +','
+ mainDiv = mainDiv \
+ + terr_html(r[1],newLine,r[3],r[5])\
+ +','
any = 1
if any ==1:
- output = output[:-1] + newLine
+ mainDiv = mainDiv[:-1] + newLine
+
+ mainDiv = mainDiv + 'From: '+row[2] + newLine
+ mainDiv = mainDiv + 'To: '+row[4]
+
+ mainDiv = mainDiv + '
'
+
- output = output + 'From: '+row[2] + newLine
- output = output + 'To: '+row[4] + newLine
+
+ mainDiv = mainDiv + ''
s = "SELECT people.Name,consort "\
+"FROM consorts LEFT JOIN people"\
+" ON people.ID = consorts.consort"\
+" WHERE consorts.ID = ?"
for row in run_query(s,t):
- output = output + print_tagged_name('Consort',row,newLine)
+ mainDiv = mainDiv + print_tagged_name\
+ ('Consort of',row,newLine)
+ mainDiv = mainDiv + '
'
- output = output + newLine
#find parents
+ mainDiv = mainDiv + ''
s = "SELECT people.Name,parents.parentID FROM"\
+" parents LEFT JOIN people"\
+" ON parents.parentID = people.ID"\
@@ -727,13 +835,15 @@ def person_info(personID,newLine):
parents =[]
for row in run_query(s,t):
- output = output + print_tagged_name('Parent',row,newLine)
+ mainDiv = mainDiv + print_tagged_name('Parent',row,newLine)
if row[0]!=None:
- parents.append(row[0] + ' ' + row[1])
+ parents.append(row[0] + ', ' + row[1])
else:
- parents.append(row[1] + ' p' + personID)
-
+ parents.append(row[1] + ', p' + personID)
+ mainDiv = mainDiv + '
'
#find spouses
+
+ mainDiv = mainDiv + ''
s = "SELECT people.NAME, marriages.IDb from"\
+" marriages LEFT JOIN people"\
+" ON people.ID = marriages.IDb"\
@@ -742,12 +852,12 @@ def person_info(personID,newLine):
spouses = []
for row in run_query(s,t):
if row[0]!=None:
- spouses.append(row[0] + ' '+str(row[1]))
- else:
- spouses.append(row[1] + ' s' + personID)
- output = output + newLine
- output = output + print_tagged_name('Spouse',row,newLine)
- output = output + relationship_html(personID,row[1],newLine)
+ spouses.append(row[0] + ', '+str(row[1]))
+ elif row[1]!='':
+ spouses.append(row[1] + ', s' + personID)
+ if row[1]!='':
+ mainDiv = mainDiv + print_tagged_name('Spouse',row,newLine)
+ mainDiv = mainDiv + relationship_html(personID,row[1],newLine)
s = "SELECT people.NAME, marriages.IDa from"\
+" marriages LEFT JOIN people"\
@@ -756,14 +866,12 @@ def person_info(personID,newLine):
+" ORDER BY IDa;"
for row in run_query(s,t):
if row[0]!=None:
- spouses.append(row[0] + ' '+str(row[1]))
+ spouses.append(row[0] + ', '+str(row[1]))
else:
- spouses.append(row[1] + ' s' + personID)
- output = output + newLine
- output = output + print_tagged_name('Spouse',row,newLine)
- output = output + relationship_html(personID,row[1],newLine)
-
- output = output + newLine
+ spouses.append(row[1] + ', s' + personID)
+ mainDiv = mainDiv + print_tagged_name('Spouse',row,newLine)
+ mainDiv = mainDiv + relationship_html(personID,row[1],newLine)
+ mainDiv = mainDiv + '
'
#find children
s = "Select people.NAME, people.ID ,people.bornYear"\
@@ -774,13 +882,14 @@ def person_info(personID,newLine):
children = []
ops =[]
+ top = ''
for row in run_query(s,t):
- output = output + print_tagged_name('Child',row,newLine)
- children.append(row[0] + ' ' + str(row[1]))
+ thisChild = print_tagged_name('Child',row,newLine)
+ children.append(row[0] + ', ' + str(row[1]))
#find children's other parent
u = "Select people.NAME, parents.parentID FROM"\
- +" parents INNER JOIN people"\
+ +" parents LEFT JOIN people"\
+" ON people.ID = parents.parentID"\
+" WHERE parents.ID = ? AND parents.parentID <>?;"
@@ -788,37 +897,69 @@ def person_info(personID,newLine):
op = 0
for r in run_query(u,ids):
- output = output + print_tagged_name('With',r,newLine)
op = 1
- ops.append(r[0] + ' ' + str(r[1]))
+ if r[0]!=None:
+ ops.append(r[0] + ', ' + str(r[1]))
+ else:
+ ops.append(r[1] + ', s' + personID)
if op==0:
- ops.append('?' + ' s' + personID)
+ ops.append('?' + ', s' + personID)
+
+ if top!=ops[-1]:
+ mainDiv = mainDiv + '
'
+ mainDiv = mainDiv + ''
+ mainDiv = mainDiv + print_tagged_name('With',r, newLine)
+
+
+ top = ops[-1]
#age when child born
if row[2] !=0 and bornYear != 0:
age = row[2]-bornYear
- output = output[:-4] + " at the age of "+str(age) + newLine
+ thisChild = thisChild[:-4] + \
+ " at the age of "+str(age) + newLine
+ mainDiv = mainDiv + thisChild
+ mainDiv = mainDiv + '
'
+ output = '';
+ output = output + mainDiv + "
"
- Self = name +' ' + str(personID)
+ output = output + ""
- image = "smallGraph.py?Self="+Self
+ imageDiv = ''
+ if picture!='.':
+ imageDiv = imageDiv + "
"\
+ +"
"\
+ + newLine
+
+ elif url!='.' and url!='. ':
+ imageDiv = imageDiv + "
"\
+ +name + " (wiki link)"+newLine
+
+ output = output + imageDiv + "
"
+
+ Self = name +', ' + str(personID)
+
+ graph = "smallGraph.py?Self="+Self
for p in parents:
- image = image + '&p='+p
+ graph = graph + '&p='+p
for c in children:
- image = image + '&c='+c
+ graph = graph + '&c='+c
for op in ops:
if op !=None:
- image = image + '&op='+op
+ graph = graph + '&op='+op
for s in spouses:
if s !=None:
- image = image + '&s='+str(s)
+ graph = graph + '&s='+str(s)
- image = image.replace(' ','%20')
- image ="
"
+ output = output + graph
+ output = output + ""
diff --git a/familyTree/makeTables.py b/familyTree/makeTables.py
index 55ce97c..ca3f603 100755
--- a/familyTree/makeTables.py
+++ b/familyTree/makeTables.py
@@ -2,7 +2,8 @@
s = 'CREATE TABLE people\n(\nID int,\nName text,\nFirstName'\
+' text,\nBorn text,\nbornYear int,\nDied text,'\
- +'\ndiedYear int,\nbornMonth int,\ndiedMonth);'
+ +'\ndiedYear int,\nbornMonth int,\ndiedMonth,'\
+ +'\nURL text,\nPicture text);'
print s
diff --git a/familyTree/text2SQL.py b/familyTree/text2SQL.py
index 1749197..6185b7f 100755
--- a/familyTree/text2SQL.py
+++ b/familyTree/text2SQL.py
@@ -34,7 +34,11 @@ for line in f:
if lastline == 'Name:':
names = thisline.split()
if len(names)>0:
- firstName = add_quotes(names[0])
+ notNames = ['Prince','Princess','St']
+ if names[0] in notNames:
+ firstName = add_quotes(names[1])
+ else:
+ firstName = add_quotes(names[0])
else:
firstName = ''
thisName = add_quotes(thisline)
@@ -46,7 +50,11 @@ for line in f:
yd = findYear.find_year(thisline)
md = findYear.find_month(thisline)
thisDied = add_quotes(thisline)
- finishedRecord = 1
+ finishedRecord=1
+ if lastline == 'URL:':
+ url = add_quotes(thisline)
+ if lastline == 'Picture:':
+ picture = add_quotes(thisline)
if lastline == 'Father:':
a = is_number(thisline)
s = make_insert('parents',[thisID, a])
@@ -58,7 +66,8 @@ for line in f:
if finishedRecord ==1:
s = make_insert('people',\
- [thisID,thisName,firstName,thisBorn,yb,thisDied,yd,mb,md])
+ [thisID,thisName,firstName,thisBorn,yb,\
+ thisDied,yd,mb,md,url,picture])
print s
finishedRecord = 0
if lastline == 'Style:':
diff --git a/familyTree/tree b/familyTree/tree
index c4ada93..f1c9448 100644
--- a/familyTree/tree
+++ b/familyTree/tree
@@ -7,6 +7,9 @@ Alfred the Great
URL:
http://en.wikipedia.org/wiki/Alfred_the_Great
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/2/22/Statue_d%27Alfred_le_Grand_%C3%A0_Winchester.jpg/220px-Statue_d%27Alfred_le_Grand_%C3%A0_Winchester.jpg
+
Born:
849
Died:
@@ -41,6 +44,9 @@ Edward the Elder
URL:
http://en.wikipedia.org/wiki/Edward_the_Elder
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Edward_the_Elder_-_MS_Royal_14_B_VI.jpg/218px-Edward_the_Elder_-_MS_Royal_14_B_VI.jpg
+
Born:
874-877
Died:
@@ -54,6 +60,7 @@ Mother:
Spouses:
62
63
+64
Style:
King of Wessex
@@ -76,6 +83,9 @@ Aethelstan
URL:
http://en.wikipedia.org/wiki/%C3%86thelstan
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Athelstan.jpg/220px-Athelstan.jpg
+
Born:
893-895
Died:
@@ -117,6 +127,9 @@ Edmund I
URL:
http://en.wikipedia.org/wiki/Edmund_I
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/3/37/Edmund_I_-_MS_Royal_14_B_V.jpg/220px-Edmund_I_-_MS_Royal_14_B_V.jpg
+
Born:
921
Died:
@@ -152,6 +165,9 @@ Eadred
URL:
http://en.wikipedia.org/wiki/Eadred
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/Eadred_penny.jpg/200px-Eadred_penny.jpg
+
Born:
?
Died:
@@ -183,6 +199,9 @@ Eadwig (Edwy)
URL:
http://en.wikipedia.org/wiki/Eadwig
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Eadwig.jpg/220px-Eadwig.jpg
+
Born:
941?
Died:
@@ -217,6 +236,9 @@ Edgar the Peaceful
URL:
http://en.wikipedia.org/wiki/Edgar_the_Peaceful
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/c/c2/Edgar_King_of_England.jpg
+
Born:
07/08/943
Died:
@@ -253,6 +275,9 @@ Edward the Martyr
URL:
http://en.wikipedia.org/wiki/Edward_the_Martyr
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Edward_the_Martyr_by_Edwards_detail.jpg/220px-Edward_the_Martyr_by_Edwards_detail.jpg
+
Born:
962
Died:
@@ -284,6 +309,9 @@ Aethelred the Unready
URL:
http://en.wikipedia.org/wiki/%C3%86thelred_the_Unready
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Ethelred_the_Unready.jpg/220px-Ethelred_the_Unready.jpg
+
Born:
966-968
Died:
@@ -309,7 +337,7 @@ To:
1013
Style:
-English
+King of the English
Territories:
England
@@ -329,6 +357,9 @@ Sweyn Forkbeard
URL:
http://en.wikipedia.org/wiki/Sweyn_Forkbeard
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Sweyn_Forkbeard.jpg/220px-Sweyn_Forkbeard.jpg
+
Born:
960
Died:
@@ -393,6 +424,9 @@ Edmund Ironside
URL:
http://en.wikipedia.org/wiki/Edmund_Ironside
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/4/44/EdmundIronside_Canutethe_Dane1.jpg/220px-EdmundIronside_Canutethe_Dane1.jpg
+
Born:
989
Died:
@@ -427,6 +461,9 @@ Cnut
URL:
http://en.wikipedia.org/wiki/Cnut_the_Great
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Cnut_the_Great_Obverse.jpg/220px-Cnut_the_Great_Obverse.jpg
+
Born:
985
Died:
@@ -482,6 +519,9 @@ Harold I Harefoot
URL:
http://en.wikipedia.org/wiki/Harold_Harefoot
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Harold1_Harefoot_02.jpg/150px-Harold1_Harefoot_02.jpg
+
Born:
c1015
Died:
@@ -513,6 +553,9 @@ Harthacnut
URL:
http://en.wikipedia.org/wiki/Harthacnut
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Coin_danish_and_english_king_Harthacnut%2C_Hardeknut_%281018-1042%29.jpg/220px-Coin_danish_and_english_king_Harthacnut%2C_Hardeknut_%281018-1042%29.jpg
+
Born:
c1018
Died:
@@ -537,7 +580,7 @@ To:
08/06/1042
Style:
-Denmark
+King of Denmark
Territories:
Denmark
@@ -557,6 +600,9 @@ Edward the Confessor
URL:
http://en.wikipedia.org/wiki/Edward_the_Confessor
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Bayeux_Tapestry_scene1_EDWARD_REX.jpg/220px-Bayeux_Tapestry_scene1_EDWARD_REX.jpg
+
Born:
C1003-1005
Died:
@@ -591,6 +637,9 @@ Harold II Godwinson
URL:
http://en.wikipedia.org/wiki/Harold_Godwinson
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/f/fd/Harold2.jpg
+
Born:
c1022
Died:
@@ -626,6 +675,9 @@ William I the Conqueror
URL:
http://en.wikipedia.org/wiki/William_the_Conqueror
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Bayeuxtapestrywilliamliftshishelm.jpg/150px-Bayeuxtapestrywilliamliftshishelm.jpg
+
Born:
c1028
Died:
@@ -670,6 +722,9 @@ William II
URL:
http://en.wikipedia.org/wiki/William_II_of_England
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/William_II_of_England.jpg/221px-William_II_of_England.jpg
+
Born:
c1056
Died:
@@ -701,6 +756,9 @@ Henry I Beuclerc
URL:
http://en.wikipedia.org/wiki/Henry_I_of_England
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Henry1.jpg/230px-Henry1.jpg
+
Born:
1068
Died:
@@ -737,6 +795,9 @@ Stephen
URL:
http://en.wikipedia.org/wiki/Stephen_of_England
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Stepan_Blois.jpg/218px-Stepan_Blois.jpg
+
Born:
C1092-1096
Died:
@@ -762,7 +823,7 @@ To:
?/04/1141
Style:
-English
+King of the English, Duke of the Normans
Territories:
England
@@ -782,6 +843,9 @@ Matilda
URL:
http://en.wikipedia.org/wiki/Empress_Matilda
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Empress_Mathilda.png/220px-Empress_Mathilda.png
+
Born:
07/02/1102
Died:
@@ -818,6 +882,9 @@ Henry II Plantagenet
URL:
http://en.wikipedia.org/wiki/Henry_II_of_England
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Henry_II_of_England_cropped.jpg/211px-Henry_II_of_England_cropped.jpg
+
Born:
05/03/1133
Died:
@@ -855,6 +922,9 @@ Henry the young king
URL:
http://en.wikipedia.org/wiki/Henry_the_Young_King
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/BL_MS_Royal_14_C_VII_f.9_%28Henry_jr%29.jpg/160px-BL_MS_Royal_14_C_VII_f.9_%28Henry_jr%29.jpg
+
Born:
28/02/1155
Died:
@@ -889,6 +959,9 @@ Richard I Lionheart
URL:
http://en.wikipedia.org/wiki/Richard_I_of_England
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Church_of_Fontevraud_Abbey_Richard_I_effigy.jpg/220px-Church_of_Fontevraud_Abbey_Richard_I_effigy.jpg
+
Born:
08/09/1157
Died:
@@ -924,7 +997,10 @@ Name:
John
URL:
-.
+http://en.wikipedia.org/wiki/John,_King_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Jan_tomb.jpg/220px-Jan_tomb.jpg
Born:
24/12/1166
@@ -962,7 +1038,10 @@ Name:
Henry III
URL:
-.
+http://en.wikipedia.org/wiki/Henry_III_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Henry_III_funeral_head.jpg/220px-Henry_III_funeral_head.jpg
Born:
01/10/1207
@@ -1011,7 +1090,10 @@ Name:
Edward I
URL:
-.
+http://en.wikipedia.org/wiki/Edward_I_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Gal_nations_edward_i.jpg/225px-Gal_nations_edward_i.jpg
Born:
17/06/1239
@@ -1048,7 +1130,10 @@ Name:
Edward II
URL:
-.
+http://en.wikipedia.org/wiki/Edward_II_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Edward_II_-_British_Library_Royal_20_A_ii_f10_%28detail%29.jpg/220px-Edward_II_-_British_Library_Royal_20_A_ii_f10_%28detail%29.jpg
Born:
25/04/1284
@@ -1084,7 +1169,10 @@ Name:
Edward III
URL:
-.
+http://en.wikipedia.org/wiki/Edward_III_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/Edward_III_of_England_%28Order_of_the_Garter%29.jpg/220px-Edward_III_of_England_%28Order_of_the_Garter%29.jpg
Born:
13/11/1312
@@ -1132,7 +1220,10 @@ Name:
Richard II
URL:
-.
+http://en.wikipedia.org/wiki/Richard_II_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Richard_II_King_of_England.jpg/220px-Richard_II_King_of_England.jpg
Born:
06/01/1367
@@ -1182,7 +1273,10 @@ Name:
Henry IV
URL:
-.
+http://en.wikipedia.org/wiki/Henry_IV_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/King_Henry_IV_from_NPG_%282%29.jpg/180px-King_Henry_IV_from_NPG_%282%29.jpg
Born:
15/04/1367
@@ -1219,7 +1313,10 @@ Name:
Henry V
URL:
-.
+http://en.wikipedia.org/wiki/Henry_V_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/1/18/King_Henry_V_from_NPG.jpg/220px-King_Henry_V_from_NPG.jpg
Born:
16/09/1386
@@ -1267,7 +1364,10 @@ Name:
Henry VI
URL:
-.
+http://en.wikipedia.org/wiki/Henry_VI_of_England
+
+Picture:
+http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/King_Henry_VI_from_NPG_%282%29.jpg/220px-King_Henry_VI_from_NPG_%282%29.jpg
Born:
06/11/1421
@@ -1330,6 +1430,9 @@ Edward IV
URL:
.
+Picture:
+.
+
Born:
28/04/1442
Died:
@@ -1379,6 +1482,9 @@ Edward V
URL:
.
+Picture:
+.
+
Born:
02/11/1470
Died:
@@ -1412,6 +1518,9 @@ Richard III
URL:
.
+Picture:
+.
+
Born:
02/10/1452
Died:
@@ -1448,6 +1557,9 @@ Henry VII
URL:
.
+Picture:
+.
+
Born:
28/01/1457
Died:
@@ -1484,6 +1596,9 @@ Henry VIII
URL:
.
+Picture:
+.
+
Born:
28/06/1491
Died:
@@ -1573,6 +1688,9 @@ Edward VI
URL:
.
+Picture:
+.
+
Born:
21/10/1537
Died:
@@ -1609,6 +1727,9 @@ Jane Grey
URL:
.
+Picture:
+.
+
Born:
C1536-1537
Died:
@@ -1645,6 +1766,9 @@ Mary I
URL:
.
+Picture:
+.
+
Born:
18/02/1516
Died:
@@ -1726,6 +1850,9 @@ Elizabeth I
URL:
.
+Picture:
+.
+
Born:
07/09/1533
Died:
@@ -1759,6 +1886,9 @@ James VI & I
URL:
.
+Picture:
+.
+
Born:
19/06/1566
Died:
@@ -1805,6 +1935,9 @@ Charles I
URL:
.
+Picture:
+.
+
Born:
19/11/1600
Died:
@@ -1852,6 +1985,9 @@ Charles II
URL:
.
+Picture:
+.
+
Born:
26/05/1630
Died:
@@ -1899,6 +2035,9 @@ James VII & II
URL:
.
+Picture:
+.
+
Born:
14/10/1633
Died:
@@ -1910,7 +2049,8 @@ Mother:
113
Spouses:
-115116
+115
+116
Style:
By the Grace of God, King of England,Scotland, France, and Ireland, Defender of the Faith etc.
@@ -1936,6 +2076,9 @@ Mary II
URL:
.
+Picture:
+.
+
Born:
30/04/1662
Died:
@@ -1976,6 +2119,9 @@ William II & III
URL:
.
+Picture:
+.
+
Born:
04/11/1650
Died:
@@ -2017,7 +2163,7 @@ Orange
Nassau
From:
-04/06/1900
+28/11/1694
To:
08/03/1702
@@ -2032,6 +2178,9 @@ Anne
URL:
.
+Picture:
+.
+
Born:
06/02/1665
Died:
@@ -2081,6 +2230,9 @@ George I
URL:
.
+Picture:
+.
+
Born:
28/05/1660
Died:
@@ -2129,6 +2281,9 @@ George II
URL:
.
+Picture:
+.
+
Born:
10/11/1683
Died:
@@ -2167,6 +2322,9 @@ George III
URL:
.
+Picture:
+.
+
Born:
04/06/1738
Died:
@@ -2229,6 +2387,9 @@ George IV
URL:
.
+Picture:
+.
+
Born:
12/08/1762
Died:
@@ -2265,6 +2426,9 @@ William IV
URL:
.
+Picture:
+.
+
Born:
21/08/1765
Died:
@@ -2301,6 +2465,9 @@ Victoria
URL:
.
+Picture:
+.
+
Born:
24/05/1819
Died:
@@ -2346,6 +2513,9 @@ Edward VII
URL:
.
+Picture:
+.
+
Born:
09/11/1841
Died:
@@ -2382,6 +2552,9 @@ George V
URL:
.
+Picture:
+.
+
Born:
03/06/1865
Died:
@@ -2431,6 +2604,9 @@ Edward VIII
URL:
.
+Picture:
+.
+
Born:
23/06/1894
Died:
@@ -2468,6 +2644,9 @@ George VI
URL:
.
+Picture:
+.
+
Born:
14/11/1895
Died:
@@ -2517,6 +2696,9 @@ Elizabeth II
URL:
.
+Picture:
+.
+
Born:
21/04/1926
Died:
@@ -2553,6 +2735,9 @@ Ealhswith
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2577,6 +2762,9 @@ Ecgwyn
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2601,6 +2789,9 @@ Aelfflaed
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2627,6 +2818,9 @@ Eadgifu
URL:
.
+Picture:
+.
+
Born:
~903
Died:
@@ -2653,6 +2847,9 @@ Aelfgifu of Shaftsbury
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2679,6 +2876,9 @@ Aethelflaed of Damerham
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2705,6 +2905,9 @@ Aelfgifu
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2731,6 +2934,9 @@ Aethelflaed
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2755,6 +2961,9 @@ Wulthryth
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2779,6 +2988,9 @@ Aelfthryth
URL:
.
+Picture:
+.
+
Born:
c.945
Died:
@@ -2806,6 +3018,9 @@ Aelfgifu of York
URL:
.
+Picture:
+.
+
Born:
c. 970
Died:
@@ -2832,6 +3047,9 @@ Emma of Normandy
URL:
.
+Picture:
+.
+
Born:
c. 985
Died:
@@ -2861,6 +3079,9 @@ Sigrid the Haughty
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -2888,6 +3109,9 @@ Ealdgyth
URL:
.
+Picture:
+.
+
Born:
c. 992
Died:
@@ -2915,6 +3139,9 @@ Aelfgifu of Northampton
URL:
.
+Picture:
+.
+
Born:
c. 990
Died:
@@ -2939,6 +3166,9 @@ Edith of Wessex
URL:
.
+Picture:
+.
+
Born:
C 1025
Died:
@@ -2965,6 +3195,9 @@ Edith the Fair
URL:
.
+Picture:
+.
+
Born:
C 1025
Died:
@@ -2989,6 +3222,9 @@ Edith of Mercia
URL:
.
+Picture:
+.
+
Born:
C 1057
Died:
@@ -3016,6 +3252,9 @@ Matilda of Flanders
URL:
.
+Picture:
+.
+
Born:
C 1031
Died:
@@ -3042,6 +3281,9 @@ Matilda of Scotland
URL:
.
+Picture:
+.
+
Born:
C 1080
Died:
@@ -3068,6 +3310,9 @@ Adeliza of Louvain
URL:
.
+Picture:
+.
+
Born:
C 1103
Died:
@@ -3095,6 +3340,9 @@ Matilda of Boulogne
URL:
.
+Picture:
+.
+
Born:
? 1105
Died:
@@ -3131,6 +3379,9 @@ Henry V
URL:
.
+Picture:
+.
+
Born:
11/08/1086
Died:
@@ -3185,6 +3436,9 @@ Geoffrey V
URL:
.
+Picture:
+.
+
Born:
24/08/1113
Died:
@@ -3219,6 +3473,9 @@ Eleanor of Aquitaine
URL:
.
+Picture:
+.
+
Born:
1122-1124
Died:
@@ -3258,6 +3515,9 @@ Margaret of France
URL:
.
+Picture:
+.
+
Born:
?/11/1157
Died:
@@ -3269,8 +3529,8 @@ Mother:
195
Spouses:
-231
-96
+23
+196
Consort of:
96
@@ -3287,6 +3547,9 @@ Berengaria of Navarre
URL:
.
+Picture:
+.
+
Born:
C 1165-1170
Died:
@@ -3313,6 +3576,9 @@ Isabella of Gloucester
URL:
.
+Picture:
+.
+
Born:
C 1173
Died:
@@ -3339,6 +3605,9 @@ Isabella of Angouleme
URL:
.
+Picture:
+.
+
Born:
C 1188
Died:
@@ -3376,6 +3645,9 @@ Eleanor of Provence
URL:
.
+Picture:
+.
+
Born:
C 1223
Died:
@@ -3402,6 +3674,9 @@ Eleanor of Castile
URL:
.
+Picture:
+.
+
Born:
1241
Died:
@@ -3438,6 +3713,9 @@ Margaret of France
URL:
.
+Picture:
+.
+
Born:
C 1279
Died:
@@ -3464,6 +3742,9 @@ Isabella of France
URL:
.
+Picture:
+.
+
Born:
1295
Died:
@@ -3490,6 +3771,9 @@ Philippa of Hainault
URL:
.
+Picture:
+.
+
Born:
24/06/1314
Died:
@@ -3516,6 +3800,9 @@ Anne of Bohemia
URL:
.
+Picture:
+.
+
Born:
11/05/1366
Died:
@@ -3542,6 +3829,9 @@ Isabella of Valois
URL:
.
+Picture:
+.
+
Born:
09/11/1389
Died:
@@ -3569,6 +3859,9 @@ Mary de Bohun
URL:
.
+Picture:
+.
+
Born:
C 1368
Died:
@@ -3593,6 +3886,9 @@ Joanna of Navarre
URL:
.
+Picture:
+.
+
Born:
c1370
Died:
@@ -3622,6 +3918,9 @@ Catherine of Valois
URL:
.
+Picture:
+.
+
Born:
27/10/1401
Died:
@@ -3649,6 +3948,9 @@ Margaret of Anjou
URL:
.
+Picture:
+.
+
Born:
23/03/1430
Died:
@@ -3675,6 +3977,9 @@ Elizabeth Woodville
URL:
.
+Picture:
+.
+
Born:
c1437
Died:
@@ -3702,6 +4007,9 @@ Anne Neville
URL:
.
+Picture:
+.
+
Born:
11/06/1456
Died:
@@ -3729,6 +4037,9 @@ Elizabeth of York
URL:
.
+Picture:
+.
+
Born:
11/02/1466
Died:
@@ -3755,6 +4066,9 @@ Catherine of Aragon
URL:
.
+Picture:
+.
+
Born:
16/12/1485
Died:
@@ -3782,6 +4096,9 @@ Anne Boleyn
URL:
.
+Picture:
+.
+
Born:
c1501
Died:
@@ -3808,6 +4125,9 @@ Jane Seymour
URL:
.
+Picture:
+.
+
Born:
c1508
Died:
@@ -3834,6 +4154,9 @@ Anne of Cleves
URL:
.
+Picture:
+.
+
Born:
22/09/1515
Died:
@@ -3860,6 +4183,9 @@ Catherine Howard
URL:
.
+Picture:
+.
+
Born:
c1523
Died:
@@ -3886,6 +4212,9 @@ Catherine Parr
URL:
.
+Picture:
+.
+
Born:
1512
Died:
@@ -3900,10 +4229,10 @@ Spouses:
252
253
38
-354
+254
Consort of:
-252,253,38,354
+252,253,38,254
ID:
@@ -3915,6 +4244,9 @@ Guildford Dudley
URL:
.
+Picture:
+.
+
Born:
1535
Died:
@@ -3939,6 +4271,9 @@ Philip II of Spain
URL:
.
+Picture:
+.
+
Born:
21/05/1527
Died:
@@ -4009,6 +4344,9 @@ Anne of Denmark
URL:
.
+Picture:
+.
+
Born:
12/12/1574
Died:
@@ -4035,6 +4373,9 @@ Henrietta Maria
URL:
.
+Picture:
+.
+
Born:
25/11/1609
Died:
@@ -4061,6 +4402,9 @@ Catherine of Braganza
URL:
.
+Picture:
+.
+
Born:
25/11/1638
Died:
@@ -4087,6 +4431,9 @@ Anne Hyde
URL:
.
+Picture:
+.
+
Born:
12/03/1637
Died:
@@ -4111,6 +4458,9 @@ Mary of Modena
URL:
.
+Picture:
+.
+
Born:
05/10/1658
Died:
@@ -4137,6 +4487,9 @@ George of Denmark
URL:
.
+Picture:
+.
+
Born:
02/04/1683
Died:
@@ -4161,6 +4514,9 @@ Sophia Dorothea
URL:
.
+Picture:
+.
+
Born:
15/09/1666
Died:
@@ -4187,6 +4543,9 @@ Caroline of Ansbach
URL:
.
+Picture:
+.
+
Born:
01/03/1683
Died:
@@ -4213,6 +4572,9 @@ Charlotte of Mecklenburg-Strelitz
URL:
.
+Picture:
+.
+
Born:
19/05/1744
Died:
@@ -4239,6 +4601,9 @@ Caroline of Brunswick
URL:
.
+Picture:
+.
+
Born:
17/05/1768
Died:
@@ -4265,6 +4630,9 @@ Adelaide of Saxe Meiningen
URL:
.
+Picture:
+.
+
Born:
13/08/1792
Died:
@@ -4291,6 +4659,9 @@ Albert
URL:
.
+Picture:
+.
+
Born:
26/08/1819
Died:
@@ -4317,6 +4688,9 @@ Alexandra
URL:
.
+Picture:
+.
+
Born:
01/12/1844
Died:
@@ -4343,6 +4717,9 @@ Mary of Teck
URL:
.
+Picture:
+.
+
Born:
26/05/1867
Died:
@@ -4369,6 +4746,9 @@ Wallis Simpson
URL:
.
+Picture:
+.
+
Born:
19/06/1896
Died:
@@ -4395,6 +4775,9 @@ Elizabeth Bowes-Lyon
URL:
.
+Picture:
+.
+
Born:
04/08/1900
Died:
@@ -4421,6 +4804,9 @@ Robert I Duke of Normandy
URL:
.
+Picture:
+.
+
Born:
22/06/1000
Died:
@@ -4452,6 +4838,9 @@ Herleva
URL:
.
+Picture:
+.
+
Born:
1003
Died:
@@ -4473,6 +4862,9 @@ Stephen II
URL:
.
+Picture:
+.
+
Born:
c1045
Died:
@@ -4517,6 +4909,9 @@ Adela of Normandy
URL:
.
+Picture:
+.
+
Born:
c1067
Died:
@@ -4543,6 +4938,9 @@ Edward the Black Prince
URL:
.
+Picture:
+.
+
Born:
15/06/1330
Died:
@@ -4567,6 +4965,9 @@ Joan of Kent
URL:
.
+Picture:
+.
+
Born:
19/09/1328
Died:
@@ -4591,6 +4992,9 @@ John of Gaunt
URL:
.
+Picture:
+.
+
Born:
06/03/1340
Died:
@@ -4615,6 +5019,9 @@ Blanche of Lancaster
URL:
.
+Picture:
+.
+
Born:
25/03/1345
Died:
@@ -4639,6 +5046,9 @@ Richard Plantagenet
URL:
.
+Picture:
+.
+
Born:
21/09/1411
Died:
@@ -4663,6 +5073,9 @@ Cecily Neville
URL:
.
+Picture:
+.
+
Born:
03/05/1415
Died:
@@ -4687,6 +5100,9 @@ Richard of Conisburgh
URL:
.
+Picture:
+.
+
Born:
20/07/1375
Died:
@@ -4711,6 +5127,9 @@ Anne de Mortimer
URL:
.
+Picture:
+.
+
Born:
27/12/1390
Died:
@@ -4735,6 +5154,9 @@ Edmund of Langley
URL:
.
+Picture:
+.
+
Born:
05/06/1341
Died:
@@ -4769,6 +5191,9 @@ Isabella of Castile
URL:
.
+Picture:
+.
+
Born:
1355
Died:
@@ -4793,13 +5218,16 @@ Edmund Tudor
URL:
.
+Picture:
+.
+
Born:
1430?
Died:
01-03/11/1456
Father:
-Owen Tudor
+223
Mother:
99
@@ -4817,6 +5245,9 @@ Margaret Beaufort
URL:
.
+Picture:
+.
+
Born:
31/05/1443
Died:
@@ -4841,6 +5272,9 @@ John Beaufort
URL:
.
+Picture:
+.
+
Born:
1403
Died:
@@ -4849,7 +5283,7 @@ Died:
Father:
145
Mother:
-Margaret Holland
+409
Spouses:
Margaret Beauchamp
@@ -4865,6 +5299,9 @@ John Beaufort
URL:
.
+Picture:
+.
+
Born:
1373
Died:
@@ -4876,7 +5313,7 @@ Mother:
Katherine Swynford
Spouses:
-Margaret Holland
+409
@@ -4889,6 +5326,9 @@ Henry Grey
URL:
.
+Picture:
+.
+
Born:
17/01/1517
Died:
@@ -4913,6 +5353,9 @@ Frances Brandon
URL:
.
+Picture:
+.
+
Born:
16/07/1517
Died:
@@ -4937,6 +5380,9 @@ Charles Brandon
URL:
.
+Picture:
+.
+
Born:
1484
Died:
@@ -4961,6 +5407,9 @@ Mary Tudor
URL:
.
+Picture:
+.
+
Born:
18/03/1496
Died:
@@ -4985,6 +5434,9 @@ Henry Stuart
URL:
.
+Picture:
+.
+
Born:
07/12/1545
Died:
@@ -5029,6 +5481,9 @@ Mary Queen of Scots
URL:
.
+Picture:
+.
+
Born:
7-8/12/1542
Died:
@@ -5065,6 +5520,9 @@ Margaret Douglas
URL:
.
+Picture:
+.
+
Born:
08/10/1515
Died:
@@ -5089,6 +5547,9 @@ James V
URL:
.
+Picture:
+.
+
Born:
10/04/1512
Died:
@@ -5123,6 +5584,9 @@ Margaret Tudor
URL:
.
+Picture:
+.
+
Born:
28/11/1489
Died:
@@ -5149,6 +5613,9 @@ William II Prince of Orange
URL:
.
+Picture:
+.
+
Born:
27/05/1626
Died:
@@ -5183,6 +5650,9 @@ Mary, Princess Royal
URL:
.
+Picture:
+.
+
Born:
04/11/1631
Died:
@@ -5207,6 +5677,9 @@ Ernest Augustus
URL:
.
+Picture:
+.
+
Born:
20/11/1629
Died:
@@ -5231,6 +5704,9 @@ Sophia of Hanover
URL:
.
+Picture:
+.
+
Born:
14/10/1630
Died:
@@ -5255,6 +5731,9 @@ Elizabeth Stuart
URL:
.
+Picture:
+.
+
Born:
19/08/1596
Died:
@@ -5281,6 +5760,9 @@ Frederick
URL:
.
+Picture:
+.
+
Born:
01/02/1707
Died:
@@ -5305,6 +5787,9 @@ Augusta of Saxe-Gotha
URL:
.
+Picture:
+.
+
Born:
30/11/1719
Died:
@@ -5329,6 +5814,9 @@ Prince Edward
URL:
.
+Picture:
+.
+
Born:
02/11/1767
Died:
@@ -5364,6 +5852,9 @@ Sigehelm
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5398,6 +5889,9 @@ Wynflaed
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5419,6 +5913,9 @@ Aelfgar
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5453,6 +5950,9 @@ Aelfgifu
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5474,6 +5974,9 @@ Ordgar
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5508,6 +6011,9 @@ Aethelwald
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5532,6 +6038,9 @@ Thored
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5566,6 +6075,9 @@ Richard the Fearless
URL:
.
+Picture:
+.
+
Born:
933
Died:
@@ -5600,6 +6112,9 @@ Gunnora
URL:
.
+Picture:
+.
+
Born:
c950
Died:
@@ -5626,6 +6141,9 @@ Mieszko I of Poland
URL:
.
+Picture:
+.
+
Born:
c940
Died:
@@ -5660,6 +6178,9 @@ Dobrawa of Bohemia
URL:
.
+Picture:
+.
+
Born:
C940-945
Died:
@@ -5686,6 +6207,9 @@ Erik the Victorious
URL:
.
+Picture:
+.
+
Born:
c945
Died:
@@ -5720,6 +6244,9 @@ Aelfhelm
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5754,6 +6281,9 @@ Godwin
URL:
.
+Picture:
+.
+
Born:
1001
Died:
@@ -5788,6 +6318,9 @@ Gytha
URL:
.
+Picture:
+.
+
Born:
c977
Died:
@@ -5812,6 +6345,9 @@ Aelfgar of Mercia
URL:
.
+Picture:
+.
+
Born:
c1000
Died:
@@ -5846,6 +6382,9 @@ Gruffodd ap Llwelyn
URL:
.
+Picture:
+.
+
Born:
c1007
Died:
@@ -5901,6 +6440,9 @@ Baldwin V
URL:
.
+Picture:
+.
+
Born:
19/08/1012
Died:
@@ -5935,6 +6477,9 @@ Adela of France
URL:
.
+Picture:
+.
+
Born:
1009
Died:
@@ -5963,6 +6508,9 @@ Malcolm III
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -5997,6 +6545,9 @@ St Margaret of Scotland
URL:
.
+Picture:
+.
+
Born:
C 1045
Died:
@@ -6023,6 +6574,9 @@ Godfrey I
URL:
.
+Picture:
+.
+
Born:
C 1060
Died:
@@ -6057,6 +6611,9 @@ Ida of Namur
URL:
.
+Picture:
+.
+
Born:
1078
Died:
@@ -6081,6 +6638,9 @@ William d'Aubigny
URL:
.
+Picture:
+.
+
Born:
c1109
Died:
@@ -6125,6 +6685,9 @@ Eustace III
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -6156,6 +6719,9 @@ Mary of Scotland
URL:
.
+Picture:
+.
+
Born:
1082
Died:
@@ -6180,6 +6746,9 @@ Henry IV
URL:
.
+Picture:
+.
+
Born:
11/11/1050
Died:
@@ -6214,6 +6783,9 @@ Fulk
URL:
.
+Picture:
+.
+
Born:
1089-1092
Died:
@@ -6258,6 +6830,9 @@ Ermengarde
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -6282,6 +6857,9 @@ William X
URL:
.
+Picture:
+.
+
Born:
1099
Died:
@@ -6316,6 +6894,9 @@ Aenor de Chatellerault
URL:
.
+Picture:
+.
+
Born:
c1103
Died:
@@ -6340,6 +6921,9 @@ Louis VII
URL:
.
+Picture:
+.
+
Born:
1120
Died:
@@ -6385,6 +6969,9 @@ Constance of Castile
URL:
.
+Picture:
+.
+
Born:
c1140
Died:
@@ -6409,6 +6996,9 @@ Bela III of Hungary
URL:
.
+Picture:
+.
+
Born:
c1148
Died:
@@ -6444,6 +7034,9 @@ Sancho VI
URL:
.
+Picture:
+.
+
Born:
21/04/1132
Died:
@@ -6478,6 +7071,9 @@ Sancha of Castine
URL:
.
+Picture:
+.
+
Born:
C 1139
Died:
@@ -6504,6 +7100,9 @@ William Fitz Robert
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -6538,6 +7137,9 @@ Hawise de Beaumont
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -6562,6 +7164,9 @@ Geoffrey Fitz Geoffrey
URL:
.
+Picture:
+.
+
Born:
c1191
Died:
@@ -6606,6 +7211,9 @@ Hubert de Burgh
URL:
.
+Picture:
+.
+
Born:
C 1160
Died:
@@ -6640,6 +7248,9 @@ Aymer of Angouleme
URL:
.
+Picture:
+.
+
Born:
C 1160
Died:
@@ -6674,6 +7285,9 @@ Alice of Courtenay
URL:
.
+Picture:
+.
+
Born:
1160
Died:
@@ -6700,6 +7314,9 @@ Hugh X of Lusignan
URL:
.
+Picture:
+.
+
Born:
C 1183-1195
Died:
@@ -6734,6 +7351,9 @@ Ramon Berenguer IV
URL:
.
+Picture:
+.
+
Born:
1198
Died:
@@ -6778,6 +7398,9 @@ Beatrice of Savoy
URL:
.
+Picture:
+.
+
Born:
1205
Died:
@@ -6802,6 +7425,9 @@ Ferdinand III
URL:
.
+Picture:
+.
+
Born:
05/08/1199
Died:
@@ -6848,6 +7474,9 @@ Philip III
URL:
.
+Picture:
+.
+
Born:
30/04/1245
Died:
@@ -6883,6 +7512,9 @@ Marie of Brabant
URL:
.
+Picture:
+.
+
Born:
13/05/1254
Died:
@@ -6909,6 +7541,9 @@ Joan
URL:
.
+Picture:
+.
+
Born:
C 1220
Died:
@@ -6955,6 +7590,9 @@ Philip IV
URL:
.
+Picture:
+.
+
Born:
04-06/1268
Died:
@@ -6991,6 +7629,9 @@ Joan I
URL:
.
+Picture:
+.
+
Born:
14/01/1273
Died:
@@ -7028,6 +7669,9 @@ Joan of Valois
URL:
.
+Picture:
+.
+
Born:
C 1294
Died:
@@ -7052,6 +7696,9 @@ Charles IV
URL:
.
+Picture:
+.
+
Born:
14/05/1316
Died:
@@ -7117,6 +7764,9 @@ Elizabeth of Pomerania
URL:
.
+Picture:
+.
+
Born:
1347
Died:
@@ -7143,6 +7793,9 @@ Charles VI
URL:
.
+Picture:
+.
+
Born:
03/12/1368
Died:
@@ -7177,6 +7830,9 @@ Isabeau of Bavaria
URL:
.
+Picture:
+.
+
Born:
C 1370
Died:
@@ -7203,6 +7859,9 @@ Charles
URL:
.
+Picture:
+.
+
Born:
24/11/1394
Died:
@@ -7237,6 +7896,9 @@ Charles II
URL:
.
+Picture:
+.
+
Born:
10/10/1332
Died:
@@ -7281,6 +7943,9 @@ Joan of Valois
URL:
.
+Picture:
+.
+
Born:
24/06/1343
Died:
@@ -7307,6 +7972,9 @@ John V
URL:
.
+Picture:
+.
+
Born:
1339
Died:
@@ -7341,6 +8009,9 @@ Owen Tudor
URL:
.
+Picture:
+.
+
Born:
C 1400
Died:
@@ -7365,6 +8036,9 @@ Humphrey de Bohun
URL:
.
+Picture:
+.
+
Born:
25/03/1341
Died:
@@ -7401,6 +8075,9 @@ Joan
URL:
.
+Picture:
+.
+
Born:
1347
Died:
@@ -7425,6 +8102,9 @@ Philip
URL:
.
+Picture:
+.
+
Born:
10/06/1921
Died:
@@ -7449,6 +8129,9 @@ Princess Victoria
URL:
.
+Picture:
+.
+
Born:
17/08/1786
Died:
@@ -7473,6 +8156,9 @@ Aelfgifu
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -7497,6 +8183,9 @@ Bertha of Savoy
URL:
.
+Picture:
+.
+
Born:
21/09/1051
Died:
@@ -7521,6 +8210,9 @@ William I, Count of Hainaut
URL:
.
+Picture:
+.
+
Born:
C 1286
Died:
@@ -7557,6 +8249,9 @@ Rene
URL:
.
+Picture:
+.
+
Born:
16/01/1409
Died:
@@ -7647,6 +8342,9 @@ Isabella of Lorraine
URL:
.
+Picture:
+.
+
Born:
1400
Died:
@@ -7681,6 +8379,9 @@ Richard Woodville
URL:
.
+Picture:
+.
+
Born:
1405
Died:
@@ -7715,6 +8416,9 @@ Jacquetta of Luxembourg
URL:
.
+Picture:
+.
+
Born:
1415-1416
Died:
@@ -7727,6 +8431,7 @@ Margherita
Spouses:
133
+405
@@ -7739,6 +8444,9 @@ Sir John Grey
URL:
.
+Picture:
+.
+
Born:
c.1432
Died:
@@ -7763,6 +8471,9 @@ Richard Neville
URL:
.
+Picture:
+.
+
Born:
22/11/1428
Died:
@@ -7797,6 +8508,9 @@ Anne de Beauchamp
URL:
.
+Picture:
+.
+
Born:
13/07/1426
Died:
@@ -7831,6 +8545,9 @@ Edward of Westminster
URL:
.
+Picture:
+.
+
Born:
13/10/1453
Died:
@@ -7865,6 +8582,9 @@ Ferdinand II
URL:
.
+Picture:
+.
+
Born:
10/03/1452
Died:
@@ -7911,6 +8631,9 @@ Isabella I
URL:
.
+Picture:
+.
+
Born:
22/04/1451
Died:
@@ -7946,6 +8669,9 @@ Arthur
URL:
.
+Picture:
+.
+
Born:
20/09/1486
Died:
@@ -7982,6 +8708,9 @@ Thomas Boleyn
URL:
.
+Picture:
+.
+
Born:
c1477
Died:
@@ -8006,6 +8735,9 @@ Lady Elizabeth Howard
URL:
.
+Picture:
+.
+
Born:
c1480
Died:
@@ -8030,6 +8762,9 @@ John Seymour
URL:
.
+Picture:
+.
+
Born:
c1471
Died:
@@ -8054,6 +8789,9 @@ Margery Wentworth
URL:
.
+Picture:
+.
+
Born:
c1478
Died:
@@ -8078,6 +8816,9 @@ John III
URL:
.
+Picture:
+.
+
Born:
10/11/1490
Died:
@@ -8112,6 +8853,9 @@ Maria of Julich-Berg
URL:
.
+Picture:
+.
+
Born:
03/08/1491
Died:
@@ -8136,6 +8880,9 @@ Edmund Howard
URL:
.
+Picture:
+.
+
Born:
c1478
Died:
@@ -8160,6 +8907,9 @@ Joyce Culpepper
URL:
.
+Picture:
+.
+
Born:
C 1480
Died:
@@ -8184,6 +8934,9 @@ Thomas Parr
URL:
.
+Picture:
+.
+
Born:
c1483
Died:
@@ -8208,6 +8961,9 @@ Maud Green
URL:
.
+Picture:
+.
+
Born:
06/04/1492
Died:
@@ -8232,6 +8988,9 @@ Edward Burgh
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -8256,6 +9015,9 @@ John Neville
URL:
.
+Picture:
+.
+
Born:
17/11/1493
Died:
@@ -8280,6 +9042,9 @@ Thomas Seymour
URL:
.
+Picture:
+.
+
Born:
c1508
Died:
@@ -8304,6 +9069,9 @@ John Dudley
URL:
.
+Picture:
+.
+
Born:
1504
Died:
@@ -8338,6 +9106,9 @@ Jane Guildford
URL:
.
+Picture:
+.
+
Born:
1508-1509
Died:
@@ -8362,6 +9133,9 @@ Charles V
URL:
.
+Picture:
+.
+
Born:
24/02/1500
Died:
@@ -8419,6 +9193,9 @@ Isabella of Portugal
URL:
.
+Picture:
+.
+
Born:
24/10/1503
Died:
@@ -8443,6 +9220,9 @@ Maria Manuela
URL:
.
+Picture:
+.
+
Born:
1527
Died:
@@ -8467,6 +9247,9 @@ Elizabeth of Valois
URL:
.
+Picture:
+.
+
Born:
02/04/1545
Died:
@@ -8491,6 +9274,9 @@ Anna of Austria
URL:
.
+Picture:
+.
+
Born:
01/11/1549
Died:
@@ -8515,6 +9301,9 @@ Frederick II
URL:
.
+Picture:
+.
+
Born:
01/07/1534
Died:
@@ -8550,6 +9339,9 @@ Sophie of Mecklenburg-Gustrow
URL:
.
+Picture:
+.
+
Born:
04/09/1557
Died:
@@ -8574,6 +9366,9 @@ Henry IV
URL:
.
+Picture:
+.
+
Born:
13/12/1553
Died:
@@ -8618,6 +9413,9 @@ Marie de'Medici
URL:
.
+Picture:
+.
+
Born:
26/04/1575
Died:
@@ -8642,6 +9440,9 @@ John IV
URL:
.
+Picture:
+.
+
Born:
19/03/1604
Died:
@@ -8687,6 +9488,9 @@ Luisa de Guzman
URL:
.
+Picture:
+.
+
Born:
13/10/1613
Died:
@@ -8711,6 +9515,9 @@ Edward Hyde
URL:
.
+Picture:
+.
+
Born:
18/02/1609
Died:
@@ -8745,6 +9552,9 @@ Frances Aylesbury
URL:
.
+Picture:
+.
+
Born:
25/08/1617
Died:
@@ -8769,6 +9579,9 @@ Alfonso IV
URL:
.
+Picture:
+.
+
Born:
14/10/1634
Died:
@@ -8803,6 +9616,9 @@ Laura Martinozzi
URL:
.
+Picture:
+.
+
Born:
24/05/1639
Died:
@@ -8827,6 +9643,9 @@ Frederick III
URL:
.
+Picture:
+.
+
Born:
18/03/1609
Died:
@@ -8892,6 +9711,9 @@ Sophie Amalie of Brunswick-Luneburg
URL:
.
+Picture:
+.
+
Born:
24/03/1628
Died:
@@ -8916,6 +9738,9 @@ George William
URL:
.
+Picture:
+.
+
Born:
26/01/1624
Died:
@@ -8950,6 +9775,9 @@ John Frederick
URL:
.
+Picture:
+.
+
Born:
18/10/1654
Died:
@@ -8984,6 +9812,9 @@ Princess Eleonore Erdmuth of Saxe-Eisenach
URL:
.
+Picture:
+.
+
Born:
13/04/1662
Died:
@@ -9008,6 +9839,9 @@ Charles William Ferdinand
URL:
.
+Picture:
+.
+
Born:
09/10/1735
Died:
@@ -9042,6 +9876,9 @@ Princess Augusta Frederica
URL:
.
+Picture:
+.
+
Born:
31/07/1737
Died:
@@ -9066,6 +9903,9 @@ George I
URL:
.
+Picture:
+.
+
Born:
04/02/1761
Died:
@@ -9100,6 +9940,9 @@ Luise Eleonore of Hohenlohe-Langenburg
URL:
.
+Picture:
+.
+
Born:
11/08/1763
Died:
@@ -9124,6 +9967,9 @@ Ernest I
URL:
.
+Picture:
+.
+
Born:
02/01/1784
Died:
@@ -9168,6 +10014,9 @@ Louise
URL:
.
+Picture:
+.
+
Born:
21/12/1800
Died:
@@ -9192,6 +10041,9 @@ Christian IX
URL:
.
+Picture:
+.
+
Born:
08/04/1818
Died:
@@ -9226,6 +10078,9 @@ Louise of Hesse-Kassel
URL:
.
+Picture:
+.
+
Born:
07/09/1817
Died:
@@ -9250,6 +10105,9 @@ Francis
URL:
.
+Picture:
+.
+
Born:
28/08/1837
Died:
@@ -9284,6 +10142,9 @@ Princess Mary Adelaid
URL:
.
+Picture:
+.
+
Born:
27/11/1833
Died:
@@ -9308,6 +10169,9 @@ Teackle Wallis Warfield
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -9332,6 +10196,9 @@ Alice Montague
URL:
.
+Picture:
+.
+
Born:
?
Died:
@@ -9356,6 +10223,9 @@ Earl Winfield Spencer
URL:
.
+Picture:
+.
+
Born:
20/09/1888
Died:
@@ -9380,6 +10250,9 @@ Erest Aldrich Simpson
URL:
.
+Picture:
+.
+
Born:
26/05/1897
Died:
@@ -9404,6 +10277,9 @@ Claude Bowes-Lion
URL:
.
+Picture:
+.
+
Born:
14/03/1855
Died:
@@ -9439,6 +10315,9 @@ Cecilia Cavendish-Bentinck
URL:
.
+Picture:
+.
+
Born:
11/09/1862
Died:
@@ -9463,6 +10342,9 @@ Prince Andrew
URL:
.
+Picture:
+.
+
Born:
02/02/1882
Died:
@@ -9487,6 +10369,9 @@ Princess Alice
URL:
.
+Picture:
+.
+
Born:
25/02/1885
Died:
@@ -9511,6 +10396,9 @@ Eleonore Desmier d'Obreuse
URL:
.
+Picture:
+.
+
Born:
03/01/1639
Died:
@@ -9535,6 +10423,9 @@ Charles Louis Frederick
URL:
.
+Picture:
+.
+
Born:
23/02/1708
Died:
@@ -9579,6 +10470,9 @@ Pincess Elizabeth-Albertine
URL:
.
+Picture:
+.
+
Born:
04/08/1713
Died:
@@ -9598,5 +10492,3215 @@ ID:
298
Name:
+Aethelflaed
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+12/06/918
+
+Father:
+1
+Mother:
+61
+
+Spouses:
+Aetelred
+
+Style:
+Lady of the Mercians
+Territories:
+Mercia
+
+From:
+911
+To:
+918
+
+
+
+ID:
+299
+
+Name:
+Aethelgifu
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+1
+Mother:
+61
+
+Style:
+Abbess of Shaftesbury
+Territories:
+Shaftsbury
+
+From:
+?
+To:
+?
+
+
+
+ID:
+300
+
+Name:
+Aethelweard
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+C 880
+Died:
+920-922
+
+Father:
+1
+Mother:
+61
+
+Spouses:
+?
+
+
+
+ID:
+301
+
+Name:
+Aelthryth
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+877
+Died:
+07/06/929
+
+Father:
+1
+Mother:
+61
+
+Spouses:
+Baldwin II
+
+
+
+ID:
+302
+
+Name:
+daughter
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+2
+Mother:
+62
+
+Spouses:
+Sihtric Caech
+
+
+
+ID:
+303
+
+Name:
+Eadgifu
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+902
+Died:
+After 955
+
+Father:
+2
+Mother:
+63
+
+Spouses:
+Charles II
+ Herbert the Old
+
+
+
+ID:
+304
+
+Name:
+Aelfweard
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c902
+Died:
+02/08/924
+
+Father:
+2
+Mother:
+63
+
+Spouses:
+
+
+
+
+ID:
+305
+
+Name:
+Eadgyth
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+910
+Died:
+26/01/946
+
+Father:
+2
+Mother:
+63
+
+Spouses:
+Otto I
+
+
+
+ID:
+306
+
+Name:
+Eadhild
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+937
+
+Father:
+2
+Mother:
+63
+
+Spouses:
+Hugh
+
+
+
+ID:
+307
+
+Name:
+Aelgifu
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+2
+Mother:
+63
+
+Spouses:
+a print near the alps
+
+
+
+ID:
+308
+
+Name:
+Eadflaed
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+2
+Mother:
+63
+
+Spouses:
+
+
+
+
+ID:
+309
+
+Name:
+Edwin of Wessex
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+933
+
+Father:
+2
+Mother:
+63
+
+Spouses:
+
+
+
+
+ID:
+310
+
+Name:
+St Eadburh of Winchester
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+15/06/960
+
+Father:
+2
+Mother:
+64
+
+Spouses:
+
+
+
+
+ID:
+311
+
+Name:
+Eadhgifu
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+2
+Mother:
+64
+
+Spouses:
+Louis prince of Aquitaine
+
+
+
+ID:
+312
+
+Name:
+St Edith of Wilton
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+961
+Died:
+15/09/984
+
+Father:
+7
+Mother:
+69
+
+Spouses:
+
+
+
+
+ID:
+313
+
+Name:
+Edmund
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+7
+Mother:
+70
+
+Spouses:
+
+
+
+
+ID:
+314
+
+Name:
+Aethelstan Aetheling
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+25/06/1014
+
+Father:
+9
+Mother:
+71
+
+Spouses:
+
+
+
+
+ID:
+315
+
+Name:
+Ecgberht Aetheling
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+C 1005
+
+Father:
+9
+Mother:
+71
+
+Spouses:
+
+
+
+
+ID:
+316
+
+Name:
+Eadred Aetheling
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+1012
+
+Father:
+9
+Mother:
+71
+
+Spouses:
+
+
+
+
+ID:
+317
+
+Name:
+Eadwig Aetheling
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+c1017
+
+Father:
+9
+Mother:
+71
+
+Spouses:
+
+
+
+
+ID:
+318
+
+Name:
+Edgar Aetheling
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+C 1008
+
+Father:
+9
+Mother:
+71
+
+Spouses:
+
+
+
+
+ID:
+319
+
+Name:
+Eadgyth
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+9
+Mother:
+71
+
+Spouses:
+Eadric Steona
+
+
+
+ID:
+320
+
+Name:
+Aelfgifu
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+9
+Mother:
+71
+
+Spouses:
+Uchtred the Bold
+
+
+
+ID:
+321
+
+Name:
+Wulfhilda
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+9
+Mother:
+71
+
+Spouses:
+Ulfcytel Snillingr
+
+
+
+ID:
+322
+
+Name:
+daughter
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+9
+Mother:
+71
+
+Style:
+Abbess of Wherwall Abbey
+Territories:
+Wherwall
+
+From:
+?
+To:
+?
+
+
+
+ID:
+323
+
+Name:
+Alfred Aetheling
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+1036
+
+Father:
+9
+Mother:
+72
+
+Spouses:
+
+
+
+
+ID:
+324
+
+Name:
+Goda of England
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1004
+Died:
+c1047
+
+Father:
+9
+Mother:
+72
+
+Spouses:
+Drogo of Mantes
+ Eustace II
+
+
+
+ID:
+325
+
+Name:
+Harald II
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+1018
+
+Father:
+10
+Mother:
+73
+
+Style:
+King of Denmark
+Territories:
+Denmark
+
+From:
+1014
+To:
+1018
+
+
+
+ID:
+326
+
+Name:
+Gytha
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+10
+Mother:
+73
+
+Spouses:
+
+
+
+
+ID:
+327
+
+Name:
+Gunnhild
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+10
+Mother:
+73
+
+Spouses:
+
+
+
+
+ID:
+328
+
+Name:
+Santslaue
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+10
+Mother:
+73
+
+Spouses:
+
+
+
+
+ID:
+329
+
+Name:
+Thyra
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+10
+Mother:
+73
+
+Spouses:
+
+
+
+
+ID:
+330
+
+Name:
+Estrid Svendsdatter
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+990-997
+Died:
+1057-1073
+
+Father:
+10
+Mother:
+73
+
+Spouses:
+a Russian prince
+ Ulf Jarl
+
+
+
+ID:
+331
+
+Name:
+Edward the Exile
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1016
+Died:
+08/1057
+
+Father:
+11
+Mother:
+74
+
+Spouses:
+Agatha
+
+
+
+ID:
+332
+
+Name:
+Edmund Aetheling
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+C1015-1017
+Died:
+1046-1054
+
+Father:
+11
+Mother:
+74
+
+Spouses:
+
+
+
+
+ID:
+333
+
+Name:
+Sweyn Knutsson
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1016
+Died:
+1035
+
+Father:
+12
+Mother:
+75
+
+Spouses:
+
+
+
+
+ID:
+334
+
+Name:
+Gunhilda of Denmark
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1020
+Died:
+18/07/1038
+
+Father:
+12
+Mother:
+72
+
+Spouses:
+Henry III
+
+
+
+ID:
+335
+
+Name:
+Godwine
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1049
+Died:
+?
+
+Father:
+16
+Mother:
+77
+
+Spouses:
+
+
+
+
+ID:
+336
+
+Name:
+Edmund
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1049
+Died:
+?
+
+Father:
+16
+Mother:
+77
+
+Spouses:
+
+
+
+
+ID:
+337
+
+Name:
+Magnus
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1051
+Died:
+?
+
+Father:
+16
+Mother:
+77
+
+Spouses:
+
+
+
+
+ID:
+338
+
+Name:
+Gunhild
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1055
+Died:
+1097
+
+Father:
+16
+Mother:
+77
+
+Spouses:
+Alan Rufus
+
+
+
+ID:
+339
+
+Name:
+Gytha of Wessex
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+1098-1107
+
+Father:
+16
+Mother:
+77
+
+Spouses:
+Vladimir
+
+
+
+ID:
+340
+
+Name:
+Harold
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1067
+Died:
+1098
+
+Father:
+16
+Mother:
+78
+
+Spouses:
+
+
+
+
+ID:
+341
+
+Name:
+Ulf
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1066
+Died:
+After 1087
+
+Father:
+16
+Mother:
+78
+
+Spouses:
+
+
+
+
+ID:
+342
+
+Name:
+Robert Curthose
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1054
+Died:
+03/02/1134
+
+Father:
+17
+Mother:
+79
+
+Spouses:
+Sybilla
+
+Style:
+Duke of Normandy
+Territories:
+Normandy
+
+From:
+1087
+To:
+1106
+
+
+
+ID:
+343
+
+Name:
+Richard of Normandy
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1054
+Died:
+1069-1075
+
+Father:
+17
+Mother:
+79
+
+Spouses:
+
+
+
+
+ID:
+344
+
+Name:
+Adeliza
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+Before 1113
+
+Father:
+17
+Mother:
+79
+
+Spouses:
+
+
+
+
+ID:
+345
+
+Name:
+Cecilia
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1056
+Died:
+30/06/1126
+
+Father:
+17
+Mother:
+79
+
+Style:
+Abbess of Holy Trinity
+Territories:
+Holy Trinity
+
+From:
+1112
+To:
+1126
+
+
+
+ID:
+346
+
+Name:
+Matilda
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1061
+Died:
+c1086
+
+Father:
+17
+Mother:
+79
+
+Spouses:
+
+
+
+
+ID:
+347
+
+Name:
+Constance of Normandy
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1057-1061
+Died:
+13/08/1090
+
+Father:
+17
+Mother:
+79
+
+Spouses:
+Alan IV
+
+
+
+ID:
+348
+
+Name:
+Agatha
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+17
+Mother:
+79
+
+Spouses:
+
+
+
+
+ID:
+349
+
+Name:
+William Adelin
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1103
+Died:
+1120
+
+Father:
+19
+Mother:
+80
+
+Spouses:
+
+
+
+
+ID:
+350
+
+Name:
+Richard
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+?
+
+Father:
+19
+Mother:
+80
+
+Spouses:
+
+
+
+
+ID:
+351
+
+Name:
+Eustace IV
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1129
+Died:
+17/08/1153
+
+Father:
+20
+Mother:
+82
+
+Spouses:
+Constance
+
+Style:
+Count of Boulogne
+Territories:
+Boulogne
+
+From:
+25/12/1146
+To:
+17/08/1153
+
+
+
+ID:
+352
+
+Name:
+Matilda
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+Before 1141
+
+Father:
+20
+Mother:
+82
+
+Spouses:
+Waleran de Beaumont
+
+
+
+ID:
+353
+
+Name:
+Marie I
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1136
+Died:
+25/07/1182
+
+Father:
+20
+Mother:
+82
+
+Spouses:
+Matthew of Alsace
+
+Style:
+Countess of Boulogne
+Territories:
+Boulogne
+
+From:
+1159
+To:
+1170
+
+
+
+ID:
+354
+
+Name:
+Baldwin
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+Before 1135
+
+Father:
+20
+Mother:
+82
+
+Spouses:
+
+
+
+
+ID:
+355
+
+Name:
+Adela
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+?
+Died:
+Before 1146
+
+Father:
+20
+Mother:
+82
+
+Spouses:
+
+
+
+
+ID:
+356
+
+Name:
+William I
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+C 1137
+Died:
+11/10/1159
+
+Father:
+20
+Mother:
+82
+
+Spouses:
+Isabel de Warenne
+
+Style:
+Count of Boulogne
+Territories:
+Boulogne
+
+From:
+1153
+To:
+1159
+
+
+
+ID:
+357
+
+Name:
+Geoffrey
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+01/06/1134
+Died:
+27/07/1158
+
+Father:
+84
+Mother:
+21
+
+Style:
+Count of Nantes
+Territories:
+Nantes
+
+From:
+1156
+To:
+1158
+
+
+
+ID:
+358
+
+Name:
+William FitzEmpress
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+22/07/1136
+Died:
+30/01/1163-1164
+
+Father:
+84
+Mother:
+21
+
+Spouses:
+
+
+
+
+ID:
+359
+
+Name:
+Geoffrey
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1152
+Died:
+12/12/1212
+
+Father:
+22
+Mother:
+Ykenai
+
+Style:
+Archbishop of York
+Territories:
+York
+
+From:
+?
+To:
+?
+
+
+
+ID:
+360
+
+Name:
+William IX
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+17/08/1153
+Died:
+04/1156
+
+Father:
+22
+Mother:
+85
+
+Style:
+Count of Poitiers
+Territories:
+Poitiers
+
+From:
+17/08/1153
+To:
+04/1156
+
+
+
+ID:
+361
+
+Name:
+Matilda / Maud
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1156
+Died:
+28/08/1189
+
+Father:
+22
+Mother:
+85
+
+Spouses:
+Henry the Lion
+
+
+
+ID:
+362
+
+Name:
+Geoffrey II
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+23/09/1158
+Died:
+19/08/1186
+
+Father:
+22
+Mother:
+85
+
+Spouses:
+Constance
+
+
+
+ID:
+363
+
+Name:
+Eleanor of England
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+13/10/1162
+Died:
+31/10/1214
+
+Father:
+22
+Mother:
+85
+
+Spouses:
+Alfonso VIII
+
+
+
+ID:
+364
+
+Name:
+Joan of England
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+10/1165
+Died:
+04/09/1199
+
+Father:
+22
+Mother:
+85
+
+Spouses:
+William II
+ Raymond VI
+
+
+
+ID:
+365
+
+Name:
+William Longespee
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+c1176
+Died:
+07/03/1226
+
+Father:
+22
+Mother:
+Ida de Tosny
+
+Spouses:
+Ela
+
+
+
+ID:
+366
+
+Name:
+Richard
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+05/01/1209
+Died:
+02/04/1272
+
+Father:
+25
+Mother:
+89
+
+Spouses:
+Isabel Marshal
+Sanchia
+Beatrice of Falkenburg
+
+Style:
+Count of Poitou
+Territories:
+Poitou
+
+From:
+1225
+To:
+1243
+
+Style:
+Earl of Cornwall
+Territories:
+Cornwall
+
+From:
+1225
+To:
+1272
+
+Style:
+King of the Romans
+Territories:
+Germany
+
+From:
+13/01/1257
+To:
+02/04/1272
+
+
+
+ID:
+367
+
+Name:
+Joan of England
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+22/07/1210
+Died:
+04/03/1238
+
+Father:
+25
+Mother:
+89
+
+Spouses:
+Alexander II
+
+
+
+ID:
+368
+
+Name:
+Isabella
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1214
+Died:
+01/12/1241
+
+Father:
+25
+Mother:
+89
+
+Spouses:
+Frederick II
+
+
+
+ID:
+369
+
+Name:
+Eleanor
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1215
+Died:
+13/04/1275
+
+Father:
+25
+Mother:
+89
+
+Spouses:
+William Marshal
+ Simon de Montfort
+
+
+
+ID:
+370
+
+Name:
+Margaret
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+29/09/1240
+Died:
+26/02/1275
+
+Father:
+26
+Mother:
+90
+
+Spouses:
+Alexander III
+
+
+
+ID:
+371
+
+Name:
+Beatrice
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+25/06/1242
+Died:
+24/03/1275
+
+Father:
+26
+Mother:
+90
+
+Spouses:
+John II
+
+
+
+ID:
+372
+
+Name:
+Edmund
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+16/01/1245
+Died:
+05/06/1296
+
+Father:
+26
+Mother:
+90
+
+Spouses:
+Aveline de Forz
+ Blanche of Artois
+
+Style:
+Earl of Lancaster and Leicester
+Territories:
+Lancaster
+Leicester
+
+From:
+?
+To:
+?
+
+
+
+ID:
+373
+
+Name:
+Katherine
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+25/11/1253
+Died:
+03/05/1257
+
+Father:
+26
+Mother:
+90
+
+Spouses:
+
+
+
+
+ID:
+374
+
+Name:
+daughter
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+05/1255
+Died:
+29/05/1255
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+375
+
+Name:
+Katherine
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+Before 17/06/1264
+Died:
+05/09/1264
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+376
+
+Name:
+Joan
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+summer or Januarry 1265
+Died:
+Before 07/09/1265
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+377
+
+Name:
+John
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+13/07/1266
+Died:
+03/08/1271
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+378
+
+Name:
+Henry
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+13/07/1267
+Died:
+14/10/1274
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+379
+
+Name:
+Eleanor
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+18/06/1269
+Died:
+29/08/1298
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+Henry III
+
+
+
+ID:
+380
+
+Name:
+Juliana
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+After 05/1271
+Died:
+05/09/1271
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+381
+
+Name:
+Joan
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+04/1272
+Died:
+23/04/1307
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+Gilbert de Clare
+ Ralph de Monthermer
+
+
+
+ID:
+382
+
+Name:
+Alphonso
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+24/11/1273
+Died:
+19/08/1284
+
+Father:
+27
+Mother:
+91
+
+Style:
+Earl of Chester
+Territories:
+Chester
+
+From:
+?
+To:
+?
+
+
+
+ID:
+383
+
+Name:
+Margaret
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+15/03/1275
+Died:
+After 1333
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+John II
+
+
+
+ID:
+384
+
+Name:
+Berengaria
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+01/05/1276
+Died:
+1277-1278
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+385
+
+Name:
+daughter
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+12/1277
+Died:
+01/1278
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+386
+
+Name:
+Mary
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+11-12/03/1279
+Died:
+c1332
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+387
+
+Name:
+son
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1280-1281
+Died:
+1280-1281
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+
+
+
+
+ID:
+388
+
+Name:
+Elizabeth
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+07/08/1282
+Died:
+05/05/1316
+
+Father:
+27
+Mother:
+91
+
+Spouses:
+John I
+ Humphrey de Bohun
+
+
+
+ID:
+389
+
+Name:
+Thomas
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+01/06/1300
+Died:
+08/1338
+
+Father:
+27
+Mother:
+92
+
+Spouses:
+Alice de Hales
+ Mary de Brewes
+
+
+
+ID:
+390
+
+Name:
+Edmund
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+05/08/1301
+Died:
+19/03/1330
+
+Father:
+27
+Mother:
+92
+
+Spouses:
+Margaret Wake
+
+
+
+ID:
+391
+
+Name:
+Eleanor
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+06/05/1306
+Died:
+1310
+
+Father:
+27
+Mother:
+92
+
+Spouses:
+
+
+
+
+ID:
+392
+
+Name:
+John of Eltham
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+15/08/1316
+Died:
+13/09/1336
+
+Father:
+28
+Mother:
+93
+
+Spouses:
+
+
+
+
+ID:
+393
+
+Name:
+Eleanor of Woodstock
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+18/06/1318
+Died:
+22/04/1355
+
+Father:
+28
+Mother:
+93
+
+Spouses:
+Reginald II
+
+
+
+ID:
+394
+
+Name:
+Joan
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+05/07/1321
+Died:
+07/09/1362
+
+Father:
+28
+Mother:
+93
+
+Spouses:
+David II
+
+
+
+ID:
+395
+
+Name:
+Isabella
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+16/06/1332
+Died:
+1379-1382
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+Enguerrand VII
+
+
+
+ID:
+396
+
+Name:
+Joan
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1333-1334
+Died:
+01/07/1348
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+
+
+
+
+ID:
+397
+
+Name:
+William of Hatfield
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+16/02/1337
+Died:
+After 03/03/1337
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+
+
+
+
+ID:
+398
+
+Name:
+Lionel of Antwerp
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+29/11/1338
+Died:
+07/10/1368
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+Elizabeth de Burgh
+ Violante
+
+Style:
+Duke of Clarence
+Territories:
+Clarence
+
+From:
+?
+To:
+?
+
+
+
+ID:
+399
+
+Name:
+Blanche
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+03/13472
+Died:
+03/1342
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+
+
+
+
+ID:
+400
+
+Name:
+Mary of Waltham
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+10/10/1344
+Died:
+09/1361
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+John V
+
+
+
+ID:
+401
+
+Name:
+Margaret
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+20/07/1346
+Died:
+10-12/1361
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+John Hastings
+
+
+
+ID:
+402
+
+Name:
+Thomas of Windsor
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1347
+Died:
+09/1348
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+
+
+
+
+ID:
+403
+
+Name:
+Thomas of Woodstock
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+07/01/1355
+Died:
+08-09/09/1397
+
+Father:
+29
+Mother:
+94
+
+Spouses:
+Eleanor de Bohun
+
+
+
+ID:
+404
+
+Name:
+Thomas of Lancaster
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1387
+Died:
+22/03/1421
+
+Father:
+31
+Mother:
+97
+
+Spouses:
+409
+
+
+
+ID:
+405
+
+Name:
+John of Lancaster
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+20/06/1389
+Died:
+14/09/1435
+
+Father:
+31
+Mother:
+97
+
+Spouses:
+Anne
+234
+
+Style:
+Duke of Bedford
+Territories:
+Bedford
+
+From:
+?
+To:
+?
+
+
+
+ID:
+406
+
+Name:
+Humphrey of Lancaster
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+03/10/1390
+Died:
+23/02/1447
+
+Father:
+31
+Mother:
+97
+
+Spouses:
+Jacqueline
+Eleanor Cobham
+
+Style:
+Duke of Gloucester
+Territories:
+Gloucester
+
+From:
+?
+To:
+?
+
+
+
+ID:
+407
+
+Name:
+Blanche of England
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+Spring 1392
+Died:
+22/05/1409
+
+Father:
+31
+Mother:
+97
+
+Spouses:
+Louis III
+
+
+
+ID:
+408
+
+Name:
+Philippa
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+04/06/1394
+Died:
+05/01/1430
+
+Father:
+31
+Mother:
+97
+
+Spouses:
+Eric
+
+
+
+ID:
+409
+
+Name:
+Margaret Holland
+
+URL:
+.
+
+Picture:
+.
+
+Born:
+1385
+Died:
+31/12/1439
+
+Father:
+Thomas Holland
+Mother:
+Alice Fitzalan
+
+Spouses:
+145
+404
+
diff --git a/familyTree/tree.db b/familyTree/tree.db
index c14f71edef43f6455d7bd82c6b5b8a6a22036bc4..1f5e3c198af2ba003a8035f43a662406036b073b 100644
GIT binary patch
delta 31297
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
delta 11340
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