sorry i forgot to mention one thing. when i'm in a source and try to add an object with file/form. i get the following error FORM is not a sub-item of OBJE FILE is not a sub-item of OBJE
here is essentially the code i'm running $ged = Gedcom->new(grammar_version => 5.5 ); $record=$ged->add_source(); $obje=$record->add("obje"); $obje->add("form", "png"); $obje->add("file", "somefile"); thanks for any additional advice. nate On 1/23/06, Paul Johnson <[EMAIL PROTECTED]> wrote: > On Thu, Jan 12, 2006 at 06:15:17PM -0700, Nate Fuhriman wrote: > > > I am using gedcom.pm to create a simple gedcom editing program. it's > > basically a thin layer to allow a user access to gedcom files. I am having > some > > problems though and was wondering if anybody out there could help. > > Looks like that'll be me then ;-) > > > how do I automatically find out if I can have multiple items. IE I can > have > > many FAMS tags but only one SEX tag. I have tried using $record->max but > > that always fails as an invalid call. > > Yes. You'll need to get into the actual grammar object to get this > information. I don't have a proper API to this, so there is a > possibility that things might change, but something like the following > should give you the information you want: > > $record->{grammar}->valid_items->{$tag}[0]{min} > $record->{grammar}->valid_items->{$tag}[0]{max} > > Here, $record is the parent record, and $tag the name of the tag you are > interested in. For example: > > my $i = $ged->get_individual("I8"); > print $i->{grammar}->valid_items->{NAME}[0]{max}; > print $i->{grammar}->valid_items->{SEX}[0]{max}; > > The call to $i->{grammar}->valid_items returns a hash reference, the > keys of which are the names of all the valid items for that record. The > values are arrays of hashes, each hash containing the grammar, the min > and the max. There is an array of hashes because the same tag can refer > to more than one grammar. This is the case with NOTEs for example, > which can either be inline or can point to a note record. It is safe > (at the moment) to just look at the first record since where there are > multiple records, the min and max are always the same. The docs (and > maybe even the source) to Gedcom::Grammar may shed a little light on > this. > > > how do I properly link external documents to SOUR. I have a gedcom file > that > > was created with PAF that shows > > 1 OBJE hello > > 2 FORM png > > 2 FILE page1.png > > 2 NOTE some description > > but gedcom.pm says that form, file and note are not valid tags for obje. > is > > there a different way? sample code maybe? > > I'm afraid you'll need to be a little more explicit in describing this, > or better still send some minimal GEDCOM file, since it "works for me". > > Here's the GEDCOM file I tested it with. This was created by Gedcom.pm > and I just added your four lines. > > 0 HEAD > 1 SOUR Gedcom.pm > 2 NAME Gedcom.pm > 2 VERS 1.1502 > 2 CORP Paul Johnson > 3 ADDR http://www.pjcj.net > 2 DATA > 3 COPR Copyright 1998-2005, Paul Johnson ([EMAIL PROTECTED]) > 1 NOTE > 2 CONT This output was generated by Gedcom.pm. > 2 CONT Gedcom.pm is Copyright 1999-2005, Paul Johnson ([EMAIL PROTECTED]) > 2 CONT Version 1.1502 - 20th December 2005 > 2 CONT > 2 CONT Gedcom.pm is free. It is licensed under the same terms as Perl > itself. > 2 CONT > 2 CONT The latest version of Gedcom.pm should be available from my > homepage: > 2 CONT http://www.pjcj.net > 1 GEDC > 2 VERS 5.5 > 2 FORM LINEAGE-LINKED > 1 DATE Mon Jan 23 12:31:25 2006 > 1 CHAR ANSEL > 1 SUBM @SUBM1@ > > 0 @SUBM1@ SUBM > 1 NAME Paul Johnson > 1 OBJE hello > 2 FORM png > 2 FILE page1.png > 2 NOTE some description > > 0 TRLR > > > how do I setup the CONT tag? if I add a note it just goes on a single > line. > > Take a look at the code in Gedcom::new, which creates the GEDCOM file > above. Basically, you just add CONT records to a NOTE record. > > > This probably leads to another point of confusion I have. It looks like > some > > tags (NOTE,PLAC) allow data to be put to them and have sub tags. is there > a > > way to automatically recognize this? > > Yes. This is a pain, I think, since it means that I need to have > separate methods to return the value associated with a tag or the > record. > > Again, I don't have a proper API for this, but the information is > available. (And I have just noticed that I don't give any warning if a > value is provided where none is expected.) You can access the > information so: > > my $i = $ged->get_individual("I1"); > print "NOTE [", exists $i->get_record("note")->{grammar}{value}, "]\n"; > print "BIRT [", exists $i->get_record("birt")->{grammar}{value}, "]\n"; > > If the "value" key is present in the grammar, then a value is allowed, > otherwise it is not. > > > Thanks in advance. > > Nate > > > > FYI once I have the program working I'm more than happy to share. :) > > I look forward to it. Sorry for the delayed reply. > > -- > Paul Johnson - [EMAIL PROTECTED] > http://www.pjcj.net >