John Hurst's Family Web Page

Introduction

Welcome to John's Family Web! A family web is like a family tree, except that it is not a tree. A tree has a single trunk, branching out into many branches, and a family tree has one ancestor, with many children or descendants. To build my family web, it is true that I started from one person (me), but I link not just to descendants, but both ancestors and descendants, and ultimately to people not related to me (unless you count in-laws of in-laws of in-laws, etc.!)

The key to understanding the family web is to recognize the power of the World Wide Web, or rather the connectivity of the http protocol (the computer protocol behind web pages). Relations (whether by blood or by marriage) are like links in a web page, and that's just what I do. I have a web page that describes me: http://<various hosts>/~ajh/cgi-bin/person.py?name=AngasJohnHurst-0 . Every immediate relation of mine described on this page is a hyperlink to another web page describing the person who is that immediate relation. Hence we get links from me to my parents, my wife (spouse), and my children.

Note the name used to describe me in the link above. This is the concatenation of the 3 names composing my full name (capitalized), together with my generation number, starting with me, hence my generation number is zero. My children are a generation later than me, hence they have generation number "+1", while my parents are a generation before me, hence they have generation number "-1". My wife is the same generation, hence she is "-0" as well. (It is an accident of history that "-0" is used, rather than "+0", so I hope that the mathematicians amongst my readers will forgive me.)

This system is used repeatedly across all relationships, thus uniquely classifying everyone. (In computing and mathematics, this repeated application is called the closure.) There are two situations where this might break down:

  1. Two descendants might both be named after a common ancestor, such as two great-grandsons being called after a common great-grandfather (say "EdwardHender-4"). The earlier born great-grandson will than be named "EdwardHender1-1" and the younger one "EdwardHender2-1" to distinguish them.
  2. Two separate blood-lines might marry, but a generation (or two) has been skipped in one line. Children are numbered according to the generation they inherit through the longer path. Hence the children of (say) "WilliamSmith-3" and "AnnJones-2" will be numbered like "HenrySmith-4".
It is worth noting that neither of these situations has happened so far in building the family web (although AnnHender-2 and AnnieHender-2 have come close!)

How to Use This Web

The Person Page

All information about a given person is stored in an XML file. The details of this file are not important to using the system, other than to appreciate that each relationship is stored in a line in the file that looks like this:

<FATHER PERSON="CharlesAngasHurst-1"/>
The name of the file that contains this line is ``AngasJohnHurst-0.xml'', and by reading that file, we can retrieve the information about my father by in turn reading the file ``CharlesAngasHurst-1.xml''. Hence we can connect from any person to the file that contains information about one of their immediate relatives. This connection is done on the fly, whenever you click on one of the links in a family web page. In technical terms, it is a cgi script (in the programming language Python) that reads the XML and renders it into HTML for display by your browser.

Thus if you click on the link Angas John Hurst right now, you will taken to my page in the family web. (Use your browser back button to return.) If you know your relationship to me, you can have fun navigating through all the people that compose that relationship!

Descendants Page

Once you are looking at a particular person page, you can find out all their descendants by clicking the button at the bottom with the prefix "Show Descendants of ..". (You can also do this by changing the name word in the URL (the address bar in your browser) to descendants (2 e's, 1 a!), and reloading, but the button is easier!).

This gives a list of all descendants of the person you were looking at, arranged so that their indentation reflects the generation depth. Thus the person themselves has no indentation, their children are indented one level (4 dots), their children's children 2 levels (8 dots), and so on.

Try this for my great-great-great-grandfather Joe Morris!

If you tried that link, you will see a number of names that are not links. This just indicates that there is not a person page for that person yet. That in turn is due to the fact that I probably don't have any more information other than that they were the children of someone who does have a person page, or that I simply haven't got around to completing that person page file.

Once you are on a descendants page, use your browser back button to return, or simply click the link of the next person you want to see (including the currentperson).

Ancestors

If you followed the above section on descendants, tracking ancestors is just as easy. Simply click the "Show Ancestors ..." button to list all known ancestors of the current person.

Finding Any Person in the Database

If you want to find a particular person in the database, use the text box next to the button labelled "Show All Matches". Type the name (or part of a name) in this text box, and click the button (or hit return). Do not uses spaces in typing names, but run the names together, using capitalization as necessary. For example to find the Angas Hursts, type "AngasHurst" (no space), and you should retrieve entries for Albert Angas Hurst, and Charles Angas Hurst.

Note that this last example does NOT find Angas John Hurst. To find this name, you could type just Angas, but that would also find Jim Angas (if he were in the database!). To indicate missing parts of the name, use '.*' between the names, so that typing 'Angas.*Hurst' will now find both Albert and Charles as before, but now also John. The text field that you can enter is actually what is known in computing circles as a regular expression, in which '.' stands for any arbitrary character, and '*' repeats the previous element zero or more times. In the pattern 'Angas.*Hurst', the '.*' will match the missing 'John', and hence find the missing Angas Hurst. In a regular expression, '+' is like '*', but matches at least one of the preceeding element.

The match also includes the generation number, so if you want to find all Hursts of my gneration, type 'Hurst-0'. '-0' will of course, yield all people in the database from my gneration! A word of warning: since '+' is a special regular expression character, you must escape it with a preceding '\' when including it as part of the generation number. Hence type '\+1' to find all people of my children's generation!

If you want to know more about regular expressions check this web page.

If all this sounds too complicated, just type one name of the desired person, and make your own selection from any multiple hits that it gives.

Dissemination

Like this system? The beauty of it is that in principle at least, it is scalable to include all the people who ever lived. Now I cannot store all those person files on my server (!), but if you have the technical knowledge to set up the cgi script and manage your own person database, talk to me! I'm happy to give out copies of the Python script and XML document type definition. That's all you need to get going, and if we have relatives in common, then we can cross link the two databases (the technical details of this haven't yet been implemented, but would be simple to do so).


This page maintained by John Hurst.
Copyright
168 accesses since
10 Dec 2006
My PhotoMy PhotoTrain Photo

Dynamically generated at 20081013:1719 from an XML file modified on 20070704:0924.
Maintainer use only; not generally accessible: Local Server Home Server Hurst Server Work Server CSSE Server