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 = "
" + printMe = printMe + \ + "Search for:
" + printMe = printMe +"" + printMe = 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 + ""\ + +"wiki link"\ + + 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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

BOJmj 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 delta 11340 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