----- THIS PAGE IS IN DRAFT ----
...
The first challenge that we face when dealing with XML metadata is that we want to make it simple to edit. XML is certainly readable and there are editors available to simplify creating well-formed XML. But, in libraries, often we deal with complex schemas, and XML nodes have attributes, and sometimes we nest XML nodes inside other nodes, and some nodes are repeatable and others not, and some fields' values should be restricted to a defined authority list, and we can leave a lot open to the interpretation of the person who is editing the XML directly. In my experience, direct editing of the XML requires an intimate knowledge of the schema.
Also, direct editing of the XML is sometimes challenging when the XML is already integrated into a repository system, such as Fedora. We don't want our catalogers to have to navigate the Fedora Administrative Client in order to edit descriptive metadata.
Rather, we opt for web interfaces for editing the metadata. And we want to allow our catalogers to use html forms to create and update the descriptive metadata. With web forms, we can simplify the metadata entry, create contextual help for each metadata field, selects or lookups against authority lists, and we can provide mechanisms for error checking. OK, so we decided that we wanted to use HTML forms.
...
Now, we needed to figure out how to map the XML metadata into the HTML forms. HTML forms are very flat. XML is not necessarily so, nodes can be repeatable, nodes can have attributes, nodes can be optional or required, nodes can be nested inside other nodes. There are a lot of challenges that need to be considered.
The first step was to map the XML into a relatively flat format so that it could be turned into an HTML form. So, we decided that we would transform the native XML into a flat XML schema, which we call the Metadata Form schema, so that the Metadata Form could be consumed by the editor interface and turned into an HTML form. In the Metadata Form, we conceived of fields and field_groups. A field corresponds to a top-level element in the native XML schema, for instance, dc:title in Dublin Core. Since top-level elements can have defined attributes as well as further nested elements, we conceived of elements in the Metadata Form that are children of a field.
Let's say for the sake of a simple example, that we are using Dublin Core, and we want to map a dc:title element.
{{{
Panel |
---|
<dc:title type='main'>The main title</dc:title> |
...