Schweitzer, Peter N.
1995
Xtme and Tkme: Editors for formal metadata
(xtme 2.7.25) (tkme 3.0.4)
computer program
Reston, Virginia
U.S. Geological Survey
https://geology.usgs.gov/tools/metadata/tools/doc/tkme.html
https://geology.usgs.gov/tools/metadata/tools/doc/xtme.html
https://geology.usgs.gov/tools/metadata/
Xtme is a program for creating and modifying formal
metadata, that is, structured documentation conforming to the
Content Standards for Digital Geospatial Metadata devised
by the Federal Geographic Data Committee (FGDC). This
editor is written using Standard C to run on UNIX systems
with the X Window System, release 11, version 4 or later.
It utilizes the X Toolkit and the Athena widget set, which
are available on nearly all X distributions.
Tkme is an improved version of Xtme, built with Tcl/Tk
instead of direct calls to the X Window System. This enables
Tkme to run on Microsoft Windows as well as Unix systems.
The editors share a considerable amount of source code with
the companion product, mp, a compiler for formal metadata
https://geology.usgs.gov/tools/metadata/tools/doc/mp.html
whose purpose is to verify that the syntactical structure of
a file containing formal metadata conforms to the FGDC standard,
and to reexpress the metadata in various useful formats. The
editor is intended to simplify the process of creating metadata
that conform to the standard.
The editors have the ability to recognize and process elements
that are not part of the FGDC standard, provided these elements
are properly described in a local file.
Xtme and Tkme are available in source code. Executable files are
available for Linux, Solaris, and Microsoft Windows as well.
Throughout the 1980s and early 1990s, the improving capability
of desktop computers to carry out complex analyses has
increased the popularity of geographic information systems
(GIS). As they became familiar with GIS technology, people at
all levels of government, in industry, and in academia have
been calling for better access to publically-available
geospatial information and more general use of standard terms
of reference and of standard formats for the exchange of
geospatial data and information.
Answering this need is the goal of the National Spatial Data
Infrastructure (NSDI), a government-wide coordination effort
initiated at the Federal level through Executive Order 12906,
which was signed by President Clinton in April of 1994.
A key component of NSDI is the development of a National
Geospatial Data Clearinghouse, a general source of information
about geospatial data that are available to the public. With
the Clearinghouse a user can determine whether geospatial data
on a region of interest exist and are appropriate for solving
the problem at hand.
The Clearinghouse is a distributed network of internet sites
providing metadata (information about geospatial data) to
users in approximately the same way. Its success depends on
the overall consistency of the metadata that are made
available, because users are expected to evaluate metadata
from numerous sources in order to determine which data meet
their needs.
To promote consistency in metadata, the Federal Geographic
Data Committee (FGDC), an interagency council charged with
coordinating the Federal implementation of NSDI, has produced
the Content Standards for Digital Geospatial Metadata
(CSDGM). That document provides standard terms describing
elements common to most geospatial data, and encourages people
who document geospatial data sets to use these terms.
The Content Standards for Digital Geospatial Metadata
(hereafter referred to simply as "the standard") describes not
only the terms of reference but also specifies the
relationships among those terms. The relationships, many of
which are hierarchical, are complex and a formal syntax is
provided to specify them.
Because the syntax of the standard is complex and the number
of descriptive elements is fairly large (335), creating
metadata that conform to the standard is not an easy task. In
addition to the problem of assembling the information needed
to properly describe the subject data sets, data producers
must arrange that information using the terms given in the
standard and arrange the terms using the syntactical rules
given in the standard. The resulting metadata are formally
structured and use standard terms of reference, hence the
term "formal metadata" in the title of this report.
This software is designed to simplify the process of creating
formal metadata conforming to the standard. It provides the
element names, maintains the hierarchical structure, and
ensures proper arrangement of elements.
1. Command line options
xtme is started by issuing a command to the operating system.
Its behavior is controlled primarily through X resources,
which may be specified on the command line but which are
generally stored in an disk file in the user's home directory.
To edit an existing metadata file, give its name on the
command line as an argument.
2. X resources
Standard X resources can be specified to govern the behavior of the
Athena Widgets used by xtme. In addition, the following resources
can be used to affect the behavior of xtme.
> configFile
This resource identifies the configuration file used for specifying
input options and local extensions. The default value for this
resource is .mprc, so xtme will look in the current directory for
a file with that name.
> helpFile
This resource identifies the file containing text intended to assist
the user in filling in element values, respectively. The default
value for this resource is xtme.hlp, so xtme will look in the
current directory for a file with that name.
> keyboardFocusPolicy
By default, it matters where the pointer is when you press keys. If
you like pointer focus in your window manager, you are probably
comfortable moving the mouse around a lot while typing. But if,
like me, you prefer click-to-type windows, then you will want to
change this value to Explicit. Letter case doesn't matter.
Actions for event translations
The following actions are available for use in translation
tables.
> save Write the current file to disk
> save-as Save the current file under a different name
> quit Exit the editor without saving
> ok-save Accept the name given in the save-as dialog
> cancel-save Cancel the save-as dialog
> cut Remove the current node, making it the X selection
> copy Copy the current node, making it the X selection
> paste Paste metadata from this or another file
> clear Remove scalar children in the current subtree
> duplicate Create a copy of the current element
> help Display guide information for the current element
> dismiss Dismiss the guide information window
> hide Conceal elements below the current node
> show Reveal elements below the current node
> collapse Conceal all elements at a given level
> expand Reveal all elements at a given level
> list-home Move to the root node of the metadata
> list-up Move up one element in the list
> list-down Move down one element in the list
> list-pageup Move up one screen-full in the list
> list-pagedown Move down one screen-full in the list
Some of these actions are the same as menu items, while others are
not. There are no menu items that invoke the actions list-home,
list-up, list-down, list-pageup, and list-pagedown. The list-
actions are accomplished using the mouse in the scrollbar of the
list window.
3. Input file format
Since the FGDC Content Standards for Digital Geospatial
Metadata, as the name implies, specifies only the contents of
metadata files and not their encoding, it is necessary to
choose or devise a specification for metadata encoding in
order to create formal metadata. The encoding format interpreted
and produced by this editor is the same as that used by mp.
Interested users are referred to the documentation for mp
for details on this file format.
4. Configuration file format
The configuration file should be laid out exactly as for mp.
5. Local extensions
Local extensions, element names not found in the FGDC standard
and the relationships among them, are described in a text file
laid out exactly as for mp.
6. Help file format
A help file is provided with the editor. It contains brief
descriptions of the standard elements, with the syntactical
structure of compound elements described using the production
rules of the standard. Additional elements can be added to
this file. To add another element, place its name at the
beginning of a line. The text describing the element should be
placed on lines following the element name but in each of these
lines the first character must be a space or tab. Elements
can be added in any order.
7. Output file format
The metadata are output using the same encoding format as input,
but on output the indentation is standardized at two spaces per
level in the hierarchy.
8. Operation
The editor can be invoked with no arguments. In that case,
the metadata will be saved as "Untitled" unless the name is
changed using the Save As option in the File menu. If a file
name is given on the command line, that file will be opened
and its contents will be interpreted as metadata. If the file
does not exist or is empty, a Metadata node will be created
to which the user may add appropriate elements.
The display consists of three parts: a menu bar at the top,
a scrolling list widget containing the structural elements
of the current metadata, and a text widget containing the
contents of the currently selected element.
To add an element to the metadata, select the parent element
in the list widget, then choose the appropriate component
from the Add menu. Note that the Add menu changes to reflect
the components permitted under each element. When a scalar
element (that is, one not composed of other elements) is
selected, the Add menu will urge the user to enter the text
in the text widget. The insertion caret will then be visible
and text can be entered. Note that text can be inserted using
the standard X selection (cut-and-paste) function.
To delete an element of the metadata, select it in the list widget,
and choose Cut from the Edit menu. Note that this removes the
entire subtree (that is, the element, its components, and their
components). The Cut option in the Edit menu makes the subtree
available through the X selection mechanism, and the subtree can
be pasted into another application. At this writing, the paste
operation will convert the subtree to indented text.
The Copy option of the Edit menu also makes the current subtree
available to the X selection mechanism, but does not remove the
subtree from the current tree.
The Clear option of the Edit menu removes the scalar data from
the current element, its components, and their components. This
allows the user to retain the structure of a subtree but replace
the information it contains.
The Paste option of the Edit menu causes xtme to attempt to
insert the subtree most recently cut or copied. The subtree
is inserted as a child of the current element if that is
permitted by the standard. If the first node of the subtree
is not a child of the current element, xtme looks up the
tree towards the root node for an element into which the subtree
can be inserted. If there is no such element, the subtree
is not inserted.
To insert a section of metadata from another file or application,
select it in the other application and invoke the paste action
(by default, pressing the middle mouse button in the list window).
The data are expected to be ASCII, indented using the same rules as
for mp and xtme, so you can select a section of indented text using
a text editor or use Cut or Copy from xtme.
------------------------------------------------------------
I have tried to make the paste menu item operate the same way as
the paste action, but I have been unable to make it work without
crashing. The problem appears to lie with the time value passed
to XtGetSelectionValue; when the paste function is invoked through
an action procedure, the time can be taken from the event that
precipitated the action or from XtLastTimestampProcessed and the
selection value is obtained quickly and correctly. But when the
function is invoked through the menu item's callback procedure, the
time obtained from XtLastTimestampProcessed, while apparently a
legitimate time value, is somehow not correct, because the program
freezes for a while, then dumps core. If you know a lot about Xt
programming and are willing to assist with this problem, please
send email to pschweitzer@usgs.gov.
------------------------------------------------------------
The Duplicate option of the Edit menu causes xtme to create an
empty copy of the current element immediately following the
current element, at the same level in the hierarchy.
The Swap option of the Edit menu moves the element that is
currently selected up in the list of components of its parent.
This allows you to reorder the components of a compound
element.
The View menu allows the user to control the display of elements
in the list widget. Options are as follows:
> All levels Make the entire hierarchy visible.
> 1 level Conceal all elements below the first level.
> 2 levels Conceal all elements below the second level.
> 3 levels Conceal all elements below the third level.
> Hide Conceal all components of the current element.
> Show Reveal all components of the current element.
Normally choosing "1 level" makes the components of Metadata
visible but their components invisible.
When an element's components are hidden, a plus sign is shown
at its left side in the list widget.
The Help menu has three options. Each causes text to be displayed
in a popup window. To remove the popup window, choose its Dismiss
button. The text widget is configured to wrap the text by default,
but this can be changed by choosing the Wrap button.
Version displays the version number and date of xtme. Element
displays information specific to the element currently selected
in the list widget. This information is updated every time you
select a different element in the structure. Output displays the
complete metadata record, with textual values in the indented
hierarchical format. Note that the popup shows the metadata as it
was when the Output option was selected and is not updated
automatically. To display later changes, choose Output again from
the Help menu.
To exit the editor without saving changes to the metadata, choose
Quit from the File menu. To save the metadata at any time, choose
Save. To exit the program, saving the changes, choose Close. To
save the metadata under a new name, choose Save As; a popup dialog
permits entry of the new name.
9. Known bugs
When pasting in a subtree from another application, xtme will
crash if a line in a textual value in the pasted subtree begins
with a recognized element and is indented relative to the text
immediately following it.
1995
Date of first release
Continually
None
FGDC
Metadata
Software
none
none
Peter N. Schweitzer
mailing address
Mail Stop 954 National Center
U.S. Geological Survey
12201 Sunrise Valley Drive
Reston
VA
20192
USA
(703) 648-6533
(703) 648-6560
pschweitzer@usgs.gov
Spanish-language element names kindly provided by Dr. Ing. Carlos López
of the Clearinghouse Nacional de Datos Geográficos, Uruguay
http://www.clearinghouse.gub.uy/
Indonesian-language element names kindly provided by the Indonesian
National Coordination Agency for Surveys and Mapping BAKOSURTANAL
French-language element names kindly provided by the
Canadian Center for Remote Sensing, Natural Resources Canada
The software was developed on a Data General AViiON computer
system running DG/UX version 5.4R3.10 (UNIX). It is currently
maintained on a PC running Linux kernel version 2.2.18 using
an Intel Pentium CPU.
Federal Geographic Data Committee
1994
Content Standards for Digital Geospatial Metadata
https://www.fgdc.gov/metadata/csdgm/
Schweitzer, Peter N.
1995
MP: A compiler for formal metadata
Reston, Virginia
U.S. Geological Survey
https://geology.usgs.gov/tools/metadata/tools/doc/mp.html
https://geology.usgs.gov/tools/metadata/src.tar.gz
Source code and make description files are included. Where
discrepancies exist between the syntactical and semantic
descriptions of elements in the Content Standards for Digital
Geospatial Metadata, the syntactical descriptions are regarded
as authoritative.
The compiler embodies the syntax of the 1998 version of
the Content Standard for Digital Geospatial Metadata, known as
FGDC-STD-001-1998 and also supports the Biological Data Profile
of that standard, FGDC-STD-001.1-1999.
Local extensions to the standard are permitted and a mechanism
is provided that allows these extensions to be described to
the compiler.
Federal Geographic Data Committee
19940608
Content Standards for Digital Geospatial Metadata
http://www.fgdc.gov/
paper and digital text
19940608
approval date
CSDGM
The element names, syntactical rules governing their use,
and the domains and encoding of certain values are given
in this source.
Federal Geographic Data Committee
1998
Content Standard for Digital Geospatial Metadata
https://www.fgdc.gov/metadata/csdgm/
paper and digital text
1998
approval date
FGDC-STD-001-1998
A revision of the 1994 version of the metadata standard.
Specifies modifications in the production rules and adds
a few new elements.
Biological Data Working Group, FGDC
USGS Biological Resources Division
1999
Content Standard for Digital Geospatial Metadata--Biological Data Profile, FGDC-STD-001.1-1999
Washington, D.C.
Federal Geographic Data Committee
https://www.fgdc.gov/standards/documents/standards/biodata/biodatap.html
paper and digital text
1999
approval date
FGDC-STD-001.1-1999
A registered profile of the 1998 version of the metadata
standard. Specifies modifications in the production rules
and adds new elements to improve consistency of documentation
of biological data.
Preliminary version complete.
19951108
Added paste functions. This doesn't yet work from the
callback (i.e. through the menu), but does work through
the action.
19960115
Added Duplicate button in Edit menu, with duplicate() action.
this inserts a node following the current node, and gives the
new node the same key.
19960118
Modified xtme.c to allow completely modeless operation, by creating
a new resource keyboardFocusPolicy. If this resource, which is set
to "Pointer" by default, is set to "Explicit" (case doesn't matter),
then whenever the main window has focus all keyboard input will go
to the value_text widget. With translations for that widget, one
can control the list widget. In the fallback resources, I have
assigned most of the list actions to Meta-KP keys.
Added a dismiss action to allow the help window to be closed using
a keyboard translation. This is by default mapped to Escape.
Fixed bugs in functions add_child, insert_item_after, and
insert_item_before in tree.c; these functions did not properly
set the prev member of the child added. The reason why this
wasn't noticed before is there are few functions that
actually traverse the linked lists backwards. Watch for this
problem in the future.
19960119
I have tried to make the paste menu item operate the same way as
the paste action, but I have been unable to make it work without
crashing. The problem appears to lie with the time value passed
to XtGetSelectionValue; when the paste function is invoked through
an action procedure, the time can be taken from the event that
precipitated the action or from XtLastTimestampProcessed and the
selection value is obtained quickly and correctly. But when the
function is invoked through the menu item's callback procedure,
the time obtained from XtLastTimestampProcessed, while apparently
a legitimate time value, is somehow not correct, because the
program freezes for a while, then dumps core. If you know a lot
about Xt programming and are willing to assist with this problem,
please send email to pschweitzer@usgs.gov.
19960124
Altered the makefile to cause the source file about.c to be
created at link time. The file about.c contains the text
that is displayed by selecting the Version option of the Help
menu. In the current makefiles, the text in about.c is
created by combining the file version with information
derived from the UNIX uname function, the date and time,
and the text contained in the file HINTS.
19960125
Modified xtme.c to update the value of Metadata_Date when the
file is saved, if its contents had changed.
19960126
Fixed a bug in paste_cb and paste_action. These functions allow
you to paste a subtree previously cut or copied from the current
file. They do this without doing an ICCCM atomic transfer. But
they allowed you to do it twice with the same subtree. That caused
dangling and circular references in the linked lists. The modified
version pastes the subtree and then replaces it with a copy of
itself, so the action can be repeated.
19960126
Modified add_element and create_add_menu in xtme.c to include an
option to add all of the children of the current element. There
is also an action, add-all(), that is by default bound to Alt-a,
that carries out the same function. This is intended to simplify
the process of populating the metadata.
19960206
Modified paste_subtree() in xtme.c to, by default, paste the subtree
after the current node (the one highlighted in the list) if the
subtree to be pasted will fit as a sibling of the current node.
Fixed a bug in main() that allowed some children of Metadata to not
point back to the root (if Metadata was not read from the file).
Added an action to check the topology of the tree. This is primarily
for me, but it could help a brave user diagnose future bugs. It
would have helped me find past bugs.
19960213
Modified config.c to recognize the keyword top_level. This fixes
a bug in which the correct keyword was skip_top_level. This applies
to mp as well.
19960215
Modified build_list() in xtme.c to extend the line array when
line_count equals line_limit, not just when line_count is greater
than line_limit.
19960430
Modified cut_cb() in xtme.c to set changed when a subtree is
detached. Now if you load a file and cut a subtree, the file
is considered to have changed (it did, of course), so Close
causes the changed version to be written to disk. Previously,
if you cut a subtree and immediately exited, the file would
not be updated.
19960523
Modified main() in xtme.c, mp.c, and cns.c to read more than one
local extensions file. This should enable people to choose more
carefully which extensions will apply to a given input file.
19960705
Modified main in xtme.c to look for two command-line option
constructs: -c configFile or -h helpFile in addition to the
input file name. The configFile and helpFile specified in
this manner supersede those specified in the normal X resource
declarations, including the command-line option that explicitly
invokes the resource manager.
19960708
Modified actions.c to better handle extensions. Modified
insert_item_after() in tree.c to provide backward link
properly (isn't used, but should be correct anyway).
19960716
Modified tree.c to include a function prune() that, given a node of the
tree, deletes all subtrees that contain no data. This function clears
out not only empty scalar elements but all container elements that do
not contain any populated scalar elements. The function is invoked by
an option "Prune" in the Edit menu or as an action invoked from a
keyboard translation.
19960808
Modified clear_scalars() in tree.c to traverse children backwards.
This was causing a core dump in Linux but, inexplicably, not on
other Unix systems. Also set the changed flag in clear_cb() in xtme.c.
19970303
Modified xtme.c to use a separate pop-up shell to hold the output
window. This causes the output window to be persistent. Added a
button labeled "Update" to that pop-up, which causes it to update
the output text. Modified the File menu to eliminate the Close
option; save and quit do the same thing. Added a pop-up dialog
when saving file named "Untitled", which is what the name is if
you don't start with a file name. Update the window-manager's
frame title with the new name.
19970303
Modified xtme to call parse_sgml and write_sgml when reading and
writing a file whose name ends with .sgml or .sgm (in lower, upper,
or mixed case).
19970723
Added the resource "min" to element_viewport and value_text in both
the fallback resources and Xtme.ad. Default value is 150. This keeps
both widgets from becoming smaller than 150 pixels.
19970912
Modified clear_cb in xtme.c to call set_text on the current element.
This causes the value_text widget to update when Clear is selected
from the Edit menu. Modified dup_cb in xtme.c to call get_text on
the current element. This saves any text entered immediately prior
to the duplicate action.
19970916
Modified prune() in tree.c to not delete a blank line in a text
value if it immediately follows a line containing text.
19970926
Modified add_element() in xtme.c to not crash when no element
is selected and (all of the above) is chosen from the Add menu.
19971008
Modified xtme.c to support a one-line tips widget below the value
window giving informative assistance on menu items. The tips
database is not yet modifiable by the user, so tips are not given
for extensions.
19971022
Modified make_add_menu() in xtme.c to cache the XtTranslations so
that they need not be parsed every time we create a new add menu.
19971026
Modified config.c to recognize a new element "tips" under input.
The argument is a file name containing tips as follows, one per line:
parent_element child_element tip_text
Any line containing unrecognized elements is ignored. Delimiters are
spaces or tabs, and a colon can immediately follow the element names.
To use these files, xtme.c was modified to search for and read all
of the tip files specified, and tips.c was modified to add the functions
needed to add tips. Note that the default tips can be replaced using
this mechanism.
19971028
Modified fallback resources to not specify xtme, hoping that whatever
the name of the executable this will allow those resources to be found.
Modified tip_action to clear the tip when leaving a menu so as not to
give the appearance that the tip text applies when a menu item is not
highlit. Set keyboardFocusPolicy to explicit by default.
19971030
Minor bug fix in tip_action() of xtme.c; set current_choice to NULL
when clearing the tip label so that the tip label is refreshed
correctly when the pointer re-enters the menu (if the menu has remained
visible when the pointer left the menu).
19971106
Modified xtme.c to include a line-number indicator for the output
window. The indicator is an editable text widget. The label for
this field is itself a command widget whose action is to go to the
line number specified in the indicator widget.
19971111
Modified fallback resources for value_text to include <Key>Home and
<Key>End so they go to beginning of line and end of line, respectively.
19971114
Modified resources so that asciiText widget translations are given
with '.' rather than '*'. This seems to fix the problem in which
xtme crashed when you put the cursor into the scroll bar and typed
PgDn (or XK_Next).
19971124
Modified check_scalar_children() in check.c to consult element_list_of()
in actions.c to determine whether an element is a scalar rather than
its own list of scalars because the list of scalars it keeps doesn't
include extensions.
19980116
Modified build_element_list() in xtme.c to free memory used by the lists.
This should actually re-use memory instead, but at least now it won't
leak.
19980217
Modified fallback resources to bind the event Meta<Key>Delete to
the two actions select-all() and delete-selection(), which come
from the Athena text widget. This causes the keystroke Alt-Del
to delete the entire text in the value window in one stroke.
19980225
Modified main() in xtme.c to correctly identify the class name of the
application in the call to XtVaAppInitialize. The previous value was
"Geomet", which is the application whose code I originally used to
build xtme in the first place. Thanks to Curtis Price for discovering
the problem of which this fix is (hopefully) the solution.
19980318
Modified actions.c to describe CSDGM version 2. Set version of xtme to 2.0.
19980826
Modified xtme.c and tkme.c to expect about_text to be an array of
pointers to strings rather than a single long string. This was done
because Microsoft Visual C++ doesn't allow static strings to be longer
than 2048 bytes. Modified makehelp.c to create a reasonable "About"
text for tkme.
19980902
Modified tkme.c to write the metadata out in sgml if the output file
name ends with .sgml or .sgm, or in xml if the output file name ends
with .xml (these extensions are not case sensitive, so .XML or .Sgml
would be equivalent to .xml and .sgml respectively).
19980929
Modified build process for tkme to use mktclapp rather than et2c.
19981019
Modified tkme to use Cygwin32 development kit under Windows NT and 95
rather than Visual C++.
19981020
Modified tkme.c and tkmerc.tcl to fix strange bug in edit_paste action.
Thanks to Dave Hart for pointing this out.
19981124
Modified text.c so that when encode_text is called, it creates a list
of pointers to elements in the tree, in sync with the lines in the
encoded text. Added a function item_of() to return the pointer to
the item given the item's line number in the encoded text. Modified
the output buttons to simplify their appearance, specifically grouping
the Dismiss, Update, and Wrap buttons into a menu with the title View,
adding a separate button "Edit", and changing the label of the goto_line
button to simply "Line:". The callback associated with the Edit button
is jumpto_cb in xtme.c, with a corresponding action jumpto_action
"jump-to()" that could be used in a translation. Changed the translation
for <Btn1Down> in output_text to include line-number(). The effect of
these changes is that when you move the insertion point in the output_text
widget and click Edit, the element you're on becomes the current element
in the edit window, even if it was previously hidden.
199812
Modified xtme.c to make the file name the label of the output window's
popup shell.
19981216
Modified xtme.c to include a Search menu option in the View menu of the
output window; all this does is call the output_text widget's search()
action, specifying the forward direction.
19981218
Modified tkmerc.tcl to disable the output window's text under Windows.
This works okay because you still get a cursor when the window has
focus. Under Unix it doesn't because although the widget knows what
line you last clicked on, it doesn't produce a visible cursor. Maybe
there's a way to do this with a tag, but I don't know how to do that
yet.
Modified tkme.c to skip over the leading + in the string passed to
the add_menu_items command. This bug caused Tkme to regard as unknown
any element whose children were hidden.
19990330
Modified xtme.c and tkmerc.tcl to add a menu item in the View menu
that toggles word wrap in the value widget. I notice that in Xtme
when you type a word that gets wrapped onto the next line, any parts
of that word are still displayed on the current line even though
they aren't really there. This is probably a minor bug in Xaw. When
you go to another element and return, you see the text rendered
correctly in the widget. Word wrap is off by default.
19990507
Modified parse_string() in text.c to skip over newlines at the
beginning of the text to be parsed. When present, these newlines
were causing Xtme to see pasted text as scalar even if it really
consisted of one or more blanks followed by a valid subtree. The
net effect is that now if you inadvertently get some blank lines
at the beginning of a subtree that you're going to paste into
Xtme or Tkme, it'll ignore those blank lines.
19990510
Modified output_update{} in tkmerc.tcl to change the text widget's
state to normal before attempting to update it (Windows version).
Otherwise the update fails. (2.3.6)
19990702
Modified get_selection_cb() in xtme.c and paste_subtree_cmd() in tkme.c
to call parse_xml_string() (in xml.c) when the string to be pasted into
the application begins with "<?". This could allow applications that
produce metadata fragments in XML to paste into Xtme and Tkme.
(xtme 2.3.5) (tkme 2.3.7)
19990723
Modified the previous change so that parse_xml_string() is called
when the first character of the selection is '<', rather than when
the first two characters are "<?". This makes it so that you can
get either an XML fragment with an XML declaration or one without
an XML declaration.
19990726
Modified many of the callbacks in xtme.c to call get_text(current)
before doing their action. This saves changes made to the current
text value, if any. In particular this affects menu items such as
prune, duplicate, and swap, and those under the View menu. Thanks
to Hugh Phillips for pointing out this behavior in Tkme; turns out
that xtme did it wrong also. (2.3.6)
19990729
Modified tkmerc.tcl to save the text of each element before changing
the element lists, not in set_current{}. Modified tkme.c to better
handle the situation where the user wants to jump to an element using
the Edit button of the output window but has already edited the value
of that element. Problem was that when the element's value got
replaced, the item pointers in the list consulted by item_of() would
become invalid unless the user selected Update from the View menu.
I made it search up the list (towards the top element) for a line in
which item_of() returns a valid node pointer. Turns out for normal
editing this is just fine for small changes. (tkme 2.3.8)
19990729
Modified tkmerc.tcl to call the C function get_text only within a
new procedure named save_current{}. Added save_current{} to the
list of commands bound to the listbox. That was a bug in which an
edited value wasn't remembered if you moved to another element by
clicking the element with the mouse. This bug was introduced by
the most recent revision, which correctly moved the save function
out of set_current{}. Thanks to Hugh Phillips for pointing this
problem out. (tkme 2.3.9)
19990816
Added an action to xtme and tkme that inserts the current date in
the value text as YYYYMMDD. This action is bound to Alt-t under
UNIX and Ctrl-t under MS-Windows. (xtme 2.3.7) (tkme 2.3.10)
19990824
Modified tkmerc.tcl so that it provides a sub-menu cascading from
the Recent option of the File menu. That sub-menu contains the
contents of the file ~/tkme.rc (for UNIX) or /usgs/tools/tkme.rc
(for MS-Windows). Whenever you open a file, if it isn't in this
list, its full path gets put into the list, so the next time you
open tkme, you can simply pick it from the list. The list can have
at most 10 items in it. This could be increased easily but I suspect
that 10 is enough for most people, and more will clutter the user
interface. Thanks to Hugh Phillips for suggesting this. (tkme 2.3.10)
19990824
Modified swap_cmd() in tkme.c to generate an empty result and return
TCL_OK if swap is called when the first child is selected (and hence
there is nothing to swap with). Previously this returned a harmless
but superfluous error without a message. (tkme 2.3.11)
19990830
Modified file_open{} in tkmerc.tcl to allow user to filter the file
display based on types. Default display is "Metadata files" with
extension ".met". Additional extensions specified in the config file
elements input:ext are also included as metadata file identifiers.
Other built-in choices are "Text files" with extension .txt or .text,
"XML files" with extension .xml, "SGML files" with extensions .sgml or
.sgm, and "All files", which includes everything. To support this
feature, a C function ext_list_cmd was added to tkme.c that could be
called by Tcl as [ext_list]. It returns a string containing all of
the extensions specified in input:ext config elements. (tkme 2.3.12)
19990902
Modified xtme.c to not assign out to stderr in the declaration of out,
since stderr is sometimes not a constant. Instead out is assigned to
NULL in its definition statement, and as the first executable statement
of main() out is assigned to stderr. (xtme 2.3.8)
19991124
Modified tkmerc.tcl to move the search facility from a separate
toplevel and put it into the output window's menu bar. Also
changed output_search{} so that the output text widget takes
focus when that procedure is invoked (by pressing the "Find"
button on the menu bar of the output window). (tkme 2.3.14)
19991210
Significant changes to memory management for all programs, including
xtme and tkme. See mp documentation for details. Also fixed bug in
tkmerc.tcl that caused "No Wrap" to replace "Dismiss" in the View
menu of the Output window if you selected the "Wrap" option.
(xtme 2.4) (tkme 2.4)
20000128
Modified xtme.c to fix bug in which a segmentation fault occurred
after the metadata had been saved to disk and before exiting, but
only if no metadata were read on startup, a rare circumstance.
(xtme 2.4.3)
20000222
Modified the code in read_metadata{} in tkmerc.tcl so that the catch
encloses only the attempt to open the file containing the list of
recently-opened metadata records. This change should make Tkme not
complain when the tkme.rc file is not present. (tkme 2.4.2)
20000417
Modified tkmerc.tcl to use the pane manager code found in Brent Welch's
book "Practical Programming in Tcl and Tk, 3rd edition" in chapter 25.
This allows users to adjust the division between the element list window
and the element value window using a grip. (tkme 2.4.3)
20000504
Modified tkmerc.tcl to divide the panes horizontally rather than
vertically. Also made the width of the scrollbars 10 instead of
the default 15, the position of the grip at 0.9 of the height of
the frame rather than 0.8, and increased the size of the grip to
15 from the default of 10. (tkme 2.4.4)
20000510
Fixed a bug in the xml parser pointed out by Frank Roberts that
caused incoming & to be ignored. (xtme 2.4.3) (tkme 2.4.4)
20000707
Modified tkmerc.tcl to bind Ctrl-p (Alt-P) to the Prune function.
(tkme 2.4.6) (xtme 2.4.5)
20000713
Modified tkmerc.tcl to include an experimental menu option HardWrap,
which causes the current element's text to be reformatted so that it
will fit inside an 80-character line, including the space needed for
2-space indents. This feature is likely to be refined somewhat after
testing. (tkme 2.4.6)
20000713
Added limited support for foreign languages. This is implemented in
mp, cns, xtme, and tkme through a command-line option -l <code> where
the code is "es" for Spanish and "id" for Indonesian. Preferred
language can also be specified in the config file using
>input
> language es
Replace es with id for Indonesian; en would be for English, but if
the value is unrecognized or missing the software will use English
element names. (xtme 2.5) (tkme 2.5)
20000804
Implemented snippets interface in Tkme. Snippets are short
sections of metadata that you want to save for later reuse.
They're stored as plain text files in a subdirectory called
"snippets" within the same directory where your tkme.rc file
resides.
At startup, all of the files in the snippets subdirectory appear
on the menu named "Snippets". When chosen from this menu, the
snippet is read, parsed, and inserted at the current node as
though it were pasted from another Tkme window.
To store the current node as a snippet, choose "Save as snippet"
from the Snippets menu. A standard save-file dialog is shown.
Give the snippet a name; it will be the name of the file in
which the snippet is stored. Don't choose a different directory;
snippets can only be retrieved from the "snippets" directory.
To get rid of a snippet that you don't want, simply delete the
file in which it is stored. (tkme 2.6.0)
20000831
Modified snippets interface so that subdirectories of the
snippets directory appear on the Snippets menu as cascades,
which means they expand to show the snippets they contain.
Subdirectories of the snippets directory can be created
directly through the underlying operating system. Depending
on the OS, you might be able to create a subdirectory from
within the save-file dialog when you're deciding where to
store the snippet. In this case the snippet will appear
inside a cascaded submenu named for the subdirectory that you
have created. (tkme 2.6.1)
20000901
Modified tkme.c to insert new elements (from the Add
menu) in the proper order. Since Tkme doesn't enforce
element ordering anyway, it's possible to rearrange
the elements and get results that you might not have
expected in some unusual circumstances. Tkme tries
first to put a new element immediately after the last
element of the same type within the subtree. If there
is no element of that type already present, it puts
the new element before the first element that appears
later in the Standard than the one you're adding.
Extensions always occur after standard elements.
(tkme 2.6.2)
20000918
Modified tkmerc.tcl so that, under UNIX, the snippets
directory and the list of recently-opened files are
stored in a subdirectory .tkme of the user's home
directory. Further, the name of the list of files
most recently opened is now called recent_files
instead of tkme.rc. (tkme 2.6.2)
20000918
Modified set_current{} in tkmerc.tcl so that if the list
has no elements, the procedure simply returns without
doing anything. This avoids a crash that occurred when
someone clicked the list window before adding any elements.
Thanks to Hugh Phillips for pointing this out. (tkme 2.6.3)
20000925
Modified local.c to output more informative messages when
a problem is encountered in building the extensions list.
Since this does not affect the program's normal operation,
I'm not changing its version number. Applies to mp, cns,
xtme, and tkme.
20000925
Modified element_add_cmd() in tkme.c so that whenever an
element is added, any hidden siblings of the new element
become visible. This bothered me because I saw that you
might add a child of an element whose other children were
not visible; the display was thus a little misleading:
>+ Process_Step
> Process_Date
In this example, the plus sign indicates that this
particular Process_Step element has some children that
are currently hidden, and the new Process_Date element
that we just added is only one of them. By forcing the
hidden siblings to be exposed, the user can immediately
see the context in which the new element has been added.
(tkme 2.6.4)
20000928
In tkmerc.tcl, created new procedure view_toggle{} that hides
the current element's children if they are visible and shows
them if they are hidden. This procedure is now bound to a
double-click of button 1 in the list widget. (tkme 2.6.4)
20000928
Modified tkmerc.tcl to configure the listbox with
exportselection false. This causes the highlighting
of the current element in that widget to not disappear
when you select text in the value window. (tkme 2.6.4)
20000928
Added direct support for the Biological Data Profile
(FGDC-STD-001.1-1999) to all programs. This involved
modifications to keyword.h, keyword.c, actions.c,
config.c, syntax.c, mp.c, tkme.c, cns.c, and xtme.c.
Activate support for this profile by specifying
"profile bio" under "input" in the config file.
(mp 2.7.0)
20001006
When I included the bio profile elements, I made it impossible
to use the same elements as extensions even when the bio
profile was not being used. This is because the bio profile
elements are kept by mp in the same bucket that it uses for
standard elements, and you can't use an extension that has the
same name as a standard element. Some of my geological data
sets use the geologic age extensions, which are taken from the
bio profile, but they don't use the rest of the bio profile.
One solution would be to simply use the bio profile for
these records. In this case the geologic age elements are
recognized properly, but a spurious error message is generated
because the bio profile includes one mandatory element,
Description_of_Geographic_Extent within Spatial_Domain.
The missing element is flagged as an error.
The correct solution is for mp and friends not to know the
bio profile elements unless the bio profile is used by
choice. That way the same elements can be introduced as
extensions in the usual way. So I modified keyword.c
and made some changes to the main programs as well, to
introduce a function use_element_names (language,profile).
This function selects standard element names using the
requested language, and adds to them the profile element
names (any profile you want, as long as it's the bio
profile). (mp 2.7.1) (mq 2.5.1) (cns 2.6.1) (tkme 2.7.1)
(xtme 2.6.1)
20001010
You're editing your metadata record and have made some
substantial changes to the text of some elements. You
haven't saved your work, and you begin changing the
value of another. By a slip of the fingers or mouse,
you manage to mix it up so badly you want to get the
previous value of this element back the way it was when
you started editing it. But there's no way to do this;
if you quit without saving, you've lost the changes that
you made to the other elements, and if you save the
current version, you've lost the previous value of the
element that you're on now.
One solution is to choose Save As from the File menu,
save the current record under a new name, edit both
records, cut the old value from the old version of the
file, and paste it into the new version of the file.
Another solution is the Revert choice of the value
widget's context menu, which pops up if you hold down
the Right mouse button when the pointer is inside the
value widget.
The Revert choice causes the current value's text to be
replaced by whatever it was when you began editing it.
If you move to another element and return, the value of
the current element is saved, and it is that newly-saved
value that will be restored if you choose Revert. So
it doesn't restore the original text of the element,
just the most recently-stored value. (tkme 2.7.1)
20001012
Many changes to Tkme's code in tkmerc.tcl and tkme.c.
Context menus are now available in the list window,
the value window, and the help text window. Popping
up when the Right mouse button is pressed, these
typically allow a window-specific Cut, Copy, and Paste,
and in the value window include Revert, Wrap, and HardWrap.
Tips have been enabled for all of these choices.
The File menu now includes a Close choice. This saves
the current file and clears the list and value windows,
readying the program to open another record.
It is now possible to use the snippets interface to
insert a metadata template (that is, a snippet can
have as its root the element Metadata). This works
only if you haven't read any metadata yet, since you
can't pin Metadata anywhere within Metadata.
Bindings have been cleaned up significantly, so that
Ctrl-X, Ctrl-C, and Ctrl-V should cut, copy, and paste
(respectively) in a logical way wherever you are.
The text cursor in the value window is now thicker and
colored dark red, so as to stand out more clearly.
Thanks to Doug Dale-Johnson (Saskatchewan Environment)
for helping to identify these needs and test the solutions.
(tkme 2.8.0)
20001016
Modified the code in tkmerc.tcl handling the list of most-
recently-opened files.
Modified tkmerc.tcl to catch <Return> typed into the output
window's search text box. Pressing Enter now executes the
search. To search again, click "Find".
Modified tkme.c so that it explicitly sets the Tcl variable
"changed" when the structure is changed. Modified get_text_cmd()
in tkme.c so that it does not set this variable but instead
returns 1 if the value was changed and zero otherwise. These
changes seem to fix the problem that Tkme was prompting the
user to save the file even immediately after saving the file
through the File:Save menu options.
Added a menu option "Replace" under Edit. This brings up a
dialog box allowing you to replace all occurrences of a search
text string. You can choose to do this (a) only in the current
data element (if the current element is a data element); (b) in
all elements below the current element; or (c) throughout the
whole file. A check-button allows you to require the letter
cases to match; by default the search string will be replaced
even if it is capitalized differently in the text.
(tkme 2.8.1)
20001023
Modified tkmerc.tcl so that you get a prompt if you select
File:Close and the file has been modified.
Modified tkmerc.tcl so that when you open a file, its name
gets added to the menu under File:Recent immediately, so
that if you close it, you can easily reopen it.
Thanks to Hugh Phillips for pointing these problems out.
tkme 2.8.3
20001215
Modified read_metadata{} in tkmerc.tcl so that the absolute
path to a file is always used. Also fixed same proc so that
the currently-opened file is added to the recent-files menu
(fixes incorrect implementation in 2.8.3). (tkme 2.8.4)
20001218
Modified tkmerc.tcl so that when the recent-files list is
read or updated (once at startup, and again every time a
file is opened), if any of the files named in it does not
exist, that file is not included in the menu File:Recent.
When the recent-files list is updated, any file that does
not exist will be omitted from the list. Thanks to Hugh
Phillips for suggesting this improvement. (tkme 2.8.5)
20010102
Hugh noted: "When you close a file in tkme, the window retains
the name of the file you just closed - it should go to 'unnamed'
or something." I've modified tkmerc.tcl so that the main
window's title bar text is "Tkme: (file name)" when a file is
loaded, and "Tkme: (no file loaded)" if you close a file. When
you open another file, the window title is updated to reflect
the new title. (tkme 2.8.5)
20010103
Modified file_save{} and file_save_as{} in tkmerc.tcl so that they
properly handle situations in which you cannot write the file
because its permissions, or that of its directory, do not allow
you to do so. The local function can_write{} helps to do this.
Thanks to Doug Dale-Johnson for pointing this problem out.
(tkme 2.8.6)
20010110
Modified element_add_cmd() in tkme.c so that elements are
inserted in correct order when a blank is present at the
head of the list of children. Previously if you wanted to
add a child using the Add menu and the first sibling was
blank, the new child would not be placed properly.
Modified paste_subtree() in tkme.c so that the same general
rules are followed when pasting subtrees either using the
Edit:Paste mechanism (main menu, popup context menu, or
Ctrl-V keystroke) or the snippet insert menu option.
(tkme 2.8.7)
20010306
Modified bindings in tkmerc.tcl to simplify and make them
more uniform across platforms. Now Alt-keys affect the
structure and Ctrl-keys affect the value and general
program operation. Also made it so that when text is
selected in the value widget and a paste is performed,
the selection is deleted before the paste. This affects
Windows and not Unix because under X the widget loses
its selection when another application makes a selection.
(tkme 2.8.8)
20010308
Modified tkmerc.tcl encapsulating in a separate procedure the
code that writes a new file name into the recent-files list
and creates an item for the file in the menu if it is not
already there. Previously this was part of file_open{}, but
as Doug Dale-Johnson kindly pointed out, this operation
should also occur when a file is saved using a new name.
20010313
Modified tkmerc.tcl to put a disabled command button
at the top of the context menus for the element structure
and value windows. This serves as a label for the menu.
However it's really there because I found that if I just
quickly pushed the right mouse button and released it,
the first menu item was activated. In each of these menus
the first item is "Cut"; so I felt it was too easy for a
naive user to unwittingly remove the selected element or
text through a single, furtive click of the mouse. Now
the menu's title is the first choice, and it takes no
action. (tkme 2.8.9)
20010516
Modified write_xml_item() in xml.c to examine the static
variable element_order when writing the children of an
element. element_order is an enum that can be either
STANDARD or ASIS (in future there could be others).
If its value is STANDARD, then the elements are written
in the order given in FGDC-STD-001-1998 and extensions
are written after all standard elements. This is and
has been the default behavior. If the value is ASIS,
then elements are written in the order they appear in
the parse tree (as input in mp, as modified by Tkme).
Modified config.c to recognize the element "order"
which will be used when found under output:xml.
The effect of this change is to allow people to explicitly
request that mp and Tkme NOT rearrange the elements in the
order given in the FGDC standard. Since most profiles
have not put extensions after all standard elements,
using the standard order causes the extensions to be
put out of the order expected in the profile. This
change allows mp and Tkme to retain the input order.
(mp 2.7.11) (tkme 2.8.10) (xtme 2.6.3) (mq 2.5.7)
20010525
A strange and unusual situation caused Tkme to crash. If an XML
file contains mixed content in one of the elements, this violates
the data model we're working with and cannot be rectified
automatically. Instead, when the file is read, we return an error
message and discard the data as though it had not been read. This
occurred when an XML file contained the elements:
><place>
><placekt>Name of the thesaurus
><placekey>term1</placekey>
><placekey>term2</placekey>
></placekt>
></place>
Note that here element placekt contains both the text of the
thesaurus name and the placekey elements which are terms from that
thesaurus. This is somewhat analogous to the situation in a text
file where an element name appears at the beginning of a line in
a data value. But in that situation it is mp's parser that has
misinterpreted the data, not invalid structure per se. Consequently
it can be repaired automatically. But in the case shown above
the fault lies in the generator of the XML code, and it cannot
reliably be repaired. (tkme 2.8.13) (xtme 2.6.6)
20010821
Modified view_wrap{} in tkmerc.tcl so that it changes the right
entry in the popup context menu for the value widget. Previously
when you selected Wrap, this code changed the Revert entry to read
No Wrap, but Revert was still the function of that menu entry.
(tkme 2.8.14)
20011101
Modified add_element{} in tkmerc.tcl so that if the element
that is added is the root element, then the Open, Configure,
and Recent choices of the File menu are disabled. Thanks
to Archie Warnock for pointing out that prior to this, you
could create some metadata using the Add menu and then read
some existing metadata using the Open or Recent choices,
which appended the opened record onto the metadata that you
had just created with the Add menu, not generally what we
want to happen. (tkme 2.8.15)
20020102
Modified tkmerc.tcl adding save_geometry{} procedure to write the
window positions and sizes to a file geometry.tcl in the same
directory as the recent files list. This file is run by source
when the program is started, restoring the size and positions of
the windows that were visible when the program was last stopped.
By default the help window is deiconified but the output window
is not (otherwise the output window will be blank). Thanks to
Nina Savar for prompting this development. (tkme 2.8.20)
20021011
Modified save_geometry{} in tkmerc.tcl to also save the
characteristics of the fonts used, so these will be
persistent from session to session. Thanks to Mark
Mihalasky for suggesting this improvement. (tkme 2.8.21)
20030221
Using a specialized Tcl script, I converted the extension
definitions from the three formal profiles (bio, shoreline,
remote-sensing) to a format compatible with Tkme's help file.
This required a minor change in help.c as well. Now you can
get help on elements from these profiles. (tkme 2.9.1)
20030319
Modified local.h to correct for number of compound elements
possible in the extensions. Modified tkme.c to put a cast
in the Tcl_CreateCommand function calls to avoid a warning
(because I don't declare the functions with const keyword
for argv). Thanks to Neil Deeds (INTERA Inc) for triggering
my investigation of the problem in local.h.
20030402
Modified extension-handling and XML parsing code to allow
unrecognized elements in XML to be manipulated by Tkme and
Xtme. (tkme 2.9.3) (xtme 2.7.2)
20030923
Modified set_text_cmd() in tkme.c so that it recognizes as
compound an unknown extension whose children are not plain
text (previously the element was recognized as compound only
by its having a known element list defined in actions.c).
(tkme 2.9.4)
20040116
Modified the error output of both local.c and config.c to send the
errors and warnings to a buffer rather than to the FILE *out used
as a global variable. Added two functions, config_errors() and
ext_errors() each of which returns one of the buffer addresses.
The calling program determines if and when the errors from parsing
the config file and extension files are to be shown to the user.
Modified tkme.c to add Tcl functions carrying these two C functions
into the Tcl namespace. Modifed Tkme to create a messages window
if either the config file or any of the extension files generated
errors or warning messages. These are shown to the user at the
beginning of the session. (tkme 2.9.7)
20040214
Modified tkme.c to read the help file after processing the
config file and setting the language for the element names.
With this arrangement, sections in the help file that are
written with foreign-language element names or extensions
will be recognized correctly and help can be displayed for
them. xtme already did this correctly. (tkme 2.9.8)
20040224
Modified tkmerc.tcl to add items to the context menu for the structure
window. Duplicate, Clear, Prune, and Save as snippet are now shown on
that context menu, with a separator between them and the basic three
(Cut, Copy, Paste). Modified tkme.c to add tip text for those new
context menu items. (tkme 2.9.10)
20040707
Modified parse_xml() in xml.c to reinitialize the root and current
node pointers every time this procedure is called; these are static
pointers local to the xml.c module which need to be cleared when
the Tkme user closes a file in order to open another one,
otherwise the XML parser is trying to build a parse tree on top
of the previous tree, which has already been deallocated. Thanks
to Peter Neri (Teleatlas) for noticeing the problem. (tkme 2.9.16)
20050207
Modified help mechanism to automatically load the correct help
file based on the specified language. Create German and French
versions of the help file from the respective Standard
translations. (tkme 2.9.19)
20060302
Modified decode_help() in help.c so that it fails gently if NULL or
an empty string was passed as its argument. (tkme 2.9.21) (xtme 2.7.16)
20061002
Modified tkmerc.tcl, keyword.c, and tkme.c to expand the Configure
option of the File menu. It is now a cascading menu that allows
the user to choose a profile, language, or read a separate config
file. This means you won't need to create a config file just to
use a profile or a language other than English. (Tkme 2.9.25)
20091106
Modified tkmeint.c, tkme.c, tkmerc.tcl, and tkme.tcl (latter from
the tkme.vfs) so that snippets, on Microsoft Windows, will be
stored in the user's application directory.
Modified tkme.tcl so that, on Microsoft Windows, a menu item in
the Snippets menu will open up the snippets folder. This allows
you to copy snippets directly into the folder; when Tkme is next
restarted, it will discover those snippets and make them available
for use. (tkme 2.9.26)
20091214
Major modifications to tkme.tcl and tkmeint.c, static compilation
of expat with libtkmeint, addition of the vocab extension to
provide a Tcl interface to web services that provide controlled
vocabularies in JSON, with Jansson-2.7 included as a static
compilation.
This change to Tkme enhances the interface by providing online
access to keywords from controlled vocabularies on the web.
Specifically the web services described at described at
https://www2.usgs.gov/science/services.html are accessed, with the
keyword interface facilitating insertion and removal of controlled
terms that are chosen by the user. A search interface permits the
user to discover terms beginning with a given text from a
specified vocabulary or from all available vocabularies.
(tkme 3.0.0)
20160318
Modified actions.c to create a new "profile" for the Lidar Base
Specification metadata, using USGS Techniques and Methods 11B4,
version 1.2. Changes were made to a number of other modules in
order to support this profile.
Created the file lidar.hlp and included it in xtme-en.hlp so that
element help for Lidar extensions can be shown to users selecting
that profile.
Modified snippets for Geodetic_Model NAD83 and WGS84 to increase
the number of digits given for the
Denominator_of_Flattening_Ratio.
(Tkme 3.0.4)
20170915
Peter N. Schweitzer
U.S. Geological Survey
mailing address
Mail Stop 954 National Center
U.S. Geological Survey
12201 Sunrise Valley Drive
Reston
VA
20192
USA
(703) 648-6533
(703) 648-6560
pschweitzer@usgs.gov
Although this program has been used by the USGS, no warranty, expressed or
implied, is made by the USGS or the United States Government as to the
accuracy and functioning of the program and related program material nor shall
the fact of distribution constitute any such warranty, and no responsibility
is assumed by the USGS in connection therewith.
TAR
Source and executable code and textual documentation.
gzip -d
2 megabytes
https://geology.usgs.gov/tools/metadata/src.tar.gz
Tcl/Tk Starkit
Tcl/Tk Starkit created with sdx
Stand-alone runtime (requires Tclkit), Microsoft Windows and Linux
2 megabytes
https://geology.usgs.gov/tools/metadata/tkme.kit
Microsoft Windows Executable
Tcl/Tk Starpack
Stand-alone runtime (executable) for Tkme
3 megabytes
https://geology.usgs.gov/tools/metadata/tkme.exe
none
20170915
Peter N. Schweitzer
mailing address
Mail Stop 954 National Center
U.S. Geological Survey
12201 Sunrise Valley Drive
Reston
VA
20192
USA
(703) 648-6533
(703) 648-6252
pschweitzer@usgs.gov
Content Standard for Digital Geospatial Metadata
FGDC-STD-001-1998