#!/usr/bin/perl use XML::DT ; use Data::Dumper; my $filename = shift; my %languages = (); my $title = ""; my @SPECS = qw/descripSpec termNoteSpec adminSpec adminNoteSpec descripNoteSpec hiSpec refSpec termCompListSpec transacNoteSpec/; %handler=( -type => { languages => SEQ, langInfo => MAP, termNoteSpec => MAP, descripSpec => MAP, adminSpec => MAP, adminNoteSpec => MAP, descripNoteSpec => MAP, hiSpec => MAP, refSpec => MAP, termCompListSpec => MAP, transacNoteSpec => MAP, transacSpec => MAP, xrefSpec => MAP, }, -default => sub { if (grep {$q eq $_} @SPECS) { $SPECS{$q}{$v{name}}= { levels => $c->{levels} || [], contents => $c->{contents} } } else { $c } }, # Main element. At the moment, do nothing. 'TBXXCS' => sub{ # $v{version} - # $v{name} - # $v{lang} - }, 'contents' => sub{ # $v{datatype} \in { plainText , noteText , picklist } # $v{forTermComp} \in { yes , no } # $v{targetType} \in { none, term, entry, binaryData, bibl, element, external} if ($v{datatype} eq 'picklist') { return [ split /\s+/, $c] } else { return $v{datatype} } }, # Grouping tag. Ignore 'datCatSet' => sub{ "" }, 'item' => sub{ # remember attributes $v{type} # occurred 52 times "$q:$c" }, 'itemSet' => sub{ # remember attributes $v{type} # occurred 7 times "$q:$c" }, ### LANGUAGES # 'langCode' => sub{} # default # 'langName' => sub{} # default 'languages' => sub{ %languages = map {@$_} @$c }, 'langInfo' => sub{ [$c->{langCode},$c->{langName}] }, ### HEADER 'title' => sub{ $title = $c; "" }, 'header' => sub{}, 'levels' => sub{ return [ split /\s+/, $c ] }, 'refObjectDef' => sub{ # occurred 7 times "$q:$c" }, 'refObjectSet' => sub{ # occurred 1 times "$q:$c" }, 'refObjectType' => sub{ # occurred 7 times "$q:$c" }, ); dt($filename,%handler); print "'$title' loaded...\n"; print Dumper(\%SPECS);