|
|
|
|
Customers GenoPro version: 2.5.4.1
Last Login: Sunday, August 28, 2016
Posts: 7,
Visits: 19
|
It strikes me that if you really wish to 'store' GenoPro data in a database then Software AG's Tamino database is the right one. It stores XML in native format. XML in, XML out.
Edited: Tuesday, April 28, 2009 by
AlB
|
|
|
|
|
Gamma Moderators Administrators FamilyTrees.GenoPro.com Customers GenoPro version: 3.1.0.1
Last Login: Monday, May 12, 2025
Posts: 952,
Visits: 10,077
|
This is true for many objets, after a discussion with Dan, we came to the conclusion that only Places, Sources and Photos should be in separate identites since they are reusable by many other objects, such as individuals, families, places and more.. Occupation, Contact, Education and pedigree link should be under Individual. Marriage/Unions should be under Family. Changing the file format to include inline objects is a big task, as it require a significant upgrade in our import module. We do not want to create a bug, so we decided to leave GenoPro 2007 as is. We have plans to improve our XML format for the next version.
Edited: Saturday, January 19, 2008 by
GenoProSupport
|
|
|
|
|
Customers Gamma GenoPro version: 3.1.0.1
Last Login: Thursday, February 11, 2021
Posts: 14,
Visits: 52
|
I have a couple questions about the data structures:
1) I see you store Occupations as references entities rather than direct child entities of individuals. I originally assumed that this was so that more than one Individual could share a single occupation definition. However, when I did some testing for this theory I found that if I assign two individuals the "same" occupation, the first thing I noticed was that, if I went into one of the individuals and edited the definition of the "shared" occupation, the definition only changed for that individual and not for all individuals that "shared" that occupation. This was further confirmed when I looked at the XML data where it appears that, even if you "pick" the same occupation for two or more individuals in the UI, in the XML it actually stored separate occupation entities for each. Is my assessment correct, therefore, that in fact a given occupation entity is never referenced by more than one individual?
2) What is the meaning of the four values in the Position.Boundary.Rectangle tag? I assume it is "Top Left, X/Y" and Bottom right, X/Y" however, I haven't confirmed this empirically and I'm also a little confused by the values since they are often negative. Assuming these are X/Y coordinates, what is the point of origin? I'm use to doing X/Y relative to the "Top, Left corner of the 'screen'/'form', whatever" however, given these negative values, I'm assuming that you choose something like a "center point" of the Geno Map and position object relative to that instead. Is this assessment correct? If so, how do you define the "center point"?
By they way.... let me know when I've become a royal pain in the but with all these questions.
Actually, while I'm at it... one more point of curiosity for me.... In the report writer, are you actually just using straight JavaScript with a few user defined functions and simply loading the XML document from the GNO file at the very beginning of the process? I guess what I'm asking is, do have to process the XML document at all in the reportwriter to expose the objects the way you do, or am I really just access exactly what's loaded from the XML exactly the way I would if I had loaded the document myself in JavaScript? The reason I ask is because if your reportwrite is able to simply load the XML document and not really have to do anything more to be able to expose that data for report generation, then attempting to use an RDBMS as the storage medium for the GenoPro data and still support the report writer functionally exactly the way it works will be a challenge and I'm just trying to get an idea of how big a challenge it might be.
BTW, in the light of new information, I'm significantly over hauling my original custom skin. Unfortunately less fun, real-world demands (like earning a living) are probably going to slow me down a bit.
Regards,
Tom Malia "a society that draws a broad line between it's military and it's intellectuals has it's wars fought by idiots and it's thinking done by cowards" (paraphrased from a source that I no longer remember)
|
|
|
|
|
Customers Gamma GenoPro version: 3.1.0.1
Last Login: Thursday, February 11, 2021
Posts: 14,
Visits: 52
|
Well, I like learning new things and this weeks been full of them.
Boy I wish I had know it was this easy a couple days ago to get the raw data!
Thanks, this may help me a lot.
Tom Malia "a society that draws a broad line between it's military and it's intellectuals has it's wars fought by idiots and it's thinking done by cowards" (paraphrased from a source that I no longer remember)
|
|
|
|
|
Gamma Moderators Administrators FamilyTrees.GenoPro.com Customers GenoPro version: 3.1.0.1
Last Login: Monday, May 12, 2025
Posts: 952,
Visits: 10,077
|
GenoPro uses XML, however to save on storage, we compress it using the zip format.Just rename the .gno file to a .zip, open the archive and you will find the file named data.xml. The multi-user module can be download from our web site. We have not documented the multi-user module because we are working on it. We will provide documentation once we have something suitable for our users. The sample source code you can download was done as a case study. We plan to give sample source code and tutorials to enable mult-user and collaboration from third party applications.
Edited: Thursday, January 17, 2008 by
GenoProSupport
|
|
|
|
|
Customers Gamma GenoPro version: 3.1.0.1
Last Login: Thursday, February 11, 2021
Posts: 14,
Visits: 52
|
I'm intrigued by the idea of using GUID's for the permanent ID's. What is the "Multi-user module" and where can I find out more information about it?
Also, you say that GenoPro uses XML for it's internal storage, but when I open a GNO file in a text editor it appears to be binary. How can I access the "raw XML" of these files and can I update it via a text/XML editor and save back those changes?
Tom Malia "a society that draws a broad line between it's military and it's intellectuals has it's wars fought by idiots and it's thinking done by cowards" (paraphrased from a source that I no longer remember)
|
|
|
|
|
Gamma Moderators Administrators FamilyTrees.GenoPro.com Customers GenoPro version: 3.1.0.1
Last Login: Monday, May 12, 2025
Posts: 952,
Visits: 10,077
|
Tom Malia (1/16/2008) Another question regarding this unlimited text field issue....
I notice that your skins for generating an HTML site uses the individuals name and ID to generate the separate HTML file names. So what happens if the name/id combination is greater than 255 characters which is the maximum size for a file name in NTFS? I did a few tests. If the individual's name is very long, the report generator truncates the name to the first 25+35 characters appended with unique id of the individual. If the permanent ID is very long, the report is unable to generate the file since the filename is invalid.
Keep in mind that the permanent ID is usually generated by GenoPro and is short, although our multi-user module uses a 128-bit GUID which is 32 characters. Users may change the permanent ID however we recommend to keep it short. If you want to limit the permanent ID to 50 characters, you can modify the file Config.xml to the following: | <Report Template="individual.htm" OutputFile="{Name.LastOrLast2:25}-{Name.FirstAndMiddle:35}-{id:50}.htm" For="Individuals" LoopItemName="i" /> |
Edited: Wednesday, January 16, 2008 by
GenoProSupport
|
|
|
|
|
Customers Gamma GenoPro version: 3.1.0.1
Last Login: Thursday, February 11, 2021
Posts: 14,
Visits: 52
|
Another question regarding this unlimited text field issue....
I notice that your skins for generating an HTML site uses the individuals name and ID to generate the separate HTML file names. So what happens if the name/id combination is greater than 255 characters which is the maximum size for a file name in NTFS?
Tom Malia "a society that draws a broad line between it's military and it's intellectuals has it's wars fought by idiots and it's thinking done by cowards" (paraphrased from a source that I no longer remember)
|
|
|
|
|
Customers Gamma GenoPro version: 3.1.0.1
Last Login: Thursday, February 11, 2021
Posts: 14,
Visits: 52
|
Hum.... this does present a challenge.
To duplicate such functionality (text fields having a million character limit) in a RDBM system would pretty much mean every text field would have to be a BLOB (binary large object) type of data type. Some RDBMS's don't support more than one such field per table and in general these types of fields are very inefficient for storage and particularly for any searches.
I'll have to think about this so.
As I said, there is a way to store pretty much anything in an RDBMS, however right now the only way I can think of to try to meet this particular requirement would be to add a "text_attribute" table that stores all text field data for all the "real tables". So the structure of the database might look something like:
/* Separate table holds unlimited size text values for the entire system */ Create table Text_Attributes ( PrimaryTableName char(200), /* surrogate keys could be used here also if necessary */ Fieldname char(200), /* surrogate keys could be used here also if necessary */ PrimaryTable_PK integer, TextData Text )
/* Actual tables store only a Primary Key and any non-text and size limited text data */ Create table Individuals ( SurKey integer, BirthDate Date, /* None text attribute */ Gender varchar(30), /* Text field that are size-limited already in GenoPro */ etc. , /* None text or size limited text attribute */ etc. , /* None text or size limited text attribute */ )
/* Store the data for an individual....*/ Insert into Individuals (1,'1969-05-26', 'Male',....)
Insert Into Text_Attributes value ('Individuals', 'ID',1,'IND000001') Insert Into Text_Attributes value ('Individuals', 'FirstName',1,'John') Insert Into Text_Attributes value ('Individuals', 'LastName',1,'Dow') etc. etc.
/* Store the data for next individual....*/ Insert into Individuals (2,'1967-04-27', 'Female',....)
Insert Into Text_Attributes value ('Individuals', 'ID',2,'IND000001') Insert Into Text_Attributes value ('Individuals', 'FirstName',2,'Jane') Insert Into Text_Attributes value ('Individuals', 'LastName',2,'Dow') etc. etc.
Such a schema, I believe would give the necessary flexibility to duplicate the functionality currently supported by the XML storage method. It also has some of it's own merits in terms of flexibility and programming techniques that could be used in some cases.
However, queries such as would normally be as simple as "Select * from Individual" would be MUCH more trouble to created in this scenario.
Also, the problem that BLOB type fields can not be efficiently searched by most RDBM systems would still be an issue.
In the long run, I personally think that it would be better if reasonable size limits could be identified for as many of the elements in the current GenoPro XML schema that are currently unlimited text fields as possible so that if the fields were to be stored in an RDBMS as many of those fields as possible could be mapped to non-BOLB data type fields.
Regarding the current XML schema.... I have two follow up questions:
1) You say that the current data is stored in XML, however when I open a GNO file in a text editor it appears to be a binary file. Is the GNO file really XML? If so, how can I go about "extracting" the raw XML from the GNO file? 2) Do you have a DTD or XML Schema that actually defines the structure of the native GenoPro file format? Where could I get a copy if it exists?
Tom Malia "a society that draws a broad line between it's military and it's intellectuals has it's wars fought by idiots and it's thinking done by cowards" (paraphrased from a source that I no longer remember)
|
|
|
|
|
Customers Gamma GenoPro version: 3.1.0.1
Last Login: Thursday, February 11, 2021
Posts: 14,
Visits: 52
|
Jean-Claude,
Thanks for the info. about the multi-user support. I'll look into that.
Tom Malia "a society that draws a broad line between it's military and it's intellectuals has it's wars fought by idiots and it's thinking done by cowards" (paraphrased from a source that I no longer remember)
|