I like the fact that it's slightly less verbose, but am put off by the fact 
that it mixes different semantic entities in the same arrays. The leader is 
"next to" the fields; the indicators are "next to" the subfields.  E.g., in the 
variable field:

  { "010" :
    [
    { "ind1": " " },
    { "ind2": " " },
    { "a"   : "68009499" }
    ]

...there's no easy way to get at the indicators, unless we force the indicators 
to always come first - a restriction which isn't onerous, but needn't be there 
in the semantic sense since the indicators are different sorts of things than 
the subfields.

Even with that restriction, it's a little confusing to get an iterator over the 
subfields.

 foreach my $sf (@{$field->[1]}) {
    next if ($sf->[0] =~ /^ind[12]$/);
    ...
  }

I supposed we could take a slice, e.g., @{$field->[1]}[2..-1] (is that even 
legal perl?) but I would claim it's  not as readable as the marc-in-json 
equivalent:

 my $ind1 = $field->{ind1};
  foreach my $sf (@{$field->{subfields}}) { ...}


(It also seems, at first glance, to be harder to write JSONPath/JSONQuery 
queries for this structure - at least ones that I could read later - although 
I'm not very familiar with those technologies).

Just for comparison, the same record as below in JSON and YAML:

JSON:
{
  "leader" : "leader string",
  "fields":
  [
    { "001" : "001 value" },
    { "002" : "002 value" },
    { "010" :
      {
        "ind1": " ",
        "ind2": " ",
        "subfields": [
          { "a"   : "68009499" }
        ]
      },
    },
    { "035" :
      {
        "ind1": " ",
        "ind2": " ",
        "subfields": [
          { "a"   : "(RLIN)MIUG0000733-B" }
        ]
      },
    },
    { "035" :
      {
        "ind1": " ",
        "ind2": " ",
        "subfields": [
          { "a"   : "(CaOTULAS)159818014" }
        ]
      },
    },
    { "245" :
      {
        "ind1": "1",
        "ind2": "0",
        "subfields": [
        { "a"   : "Capitalism, primitive and modern;" }
        { "b"   : "some aspects of Tolai economic growth" }
        { "c"   : "[by] T. Scarlett Epstein." }
        ]
      },
    }
  ]
}

YAML (complements of json_xs!)

leader: leader string
fields:
  - 001: 001 value
  - 002: 002 value
  - 010:
      ind1: ' '
      ind2: ' '
      subfields:
        - a: 68009499
  - 035:
      ind1: ' '
      ind2: ' '
      subfields:
        - a: (RLIN)MIUG0000733-B
  - 035:
      ind1: ' '
      ind2: ' '
      subfields:
        - a: (CaOTULAS)159818014
  - 245:
      ind1: 1
      ind2: 0
      subfields:
        - a: 'Capitalism, primitive and modern;'
        - b: some aspects of Tolai economic growth
        - c: '[by] T. Scarlett Epstein.'





On 1/18/11 9:14 AM, "Brad Baxter" <b...@mail.libs.uga.edu> wrote:

When I wrote Data::Pairs (http://search.cpan.org/dist/Data-Pairs/), I had
JSONified MARC in mind.  To my mind, a data structure that is a "Pairs
of Pairs"[2] would faithfully represent a MARC record, including preserving
the orders of fields/subfields.

Below is the short example from [1] displayed as a Pairs of Pairs in
JSON.  In Data::Pairs, I wanted to see what the algorithms might be
for setting and getting data from such a structure, with the intention
that those algorithms might be the basis for a similar JSON library.

So my real world situation isn't that I've used any MARC in JSON to
date, but I did begin writing code with that intention.  :-)

Appearing after the JSON example below is the same data displayed
as YAML.  By taking the Pairs of Pairs approach, I had envisioned that
presenting the YAML version to a human might facilitate manual edits.

I guess I'm late in the game suggesting another proposal, but there it
is.  Writing a schema for this might be tricky, but as a data structure
it's fairly simple and self-consistent.

Regards,

Brad

[1] http://robotlibrarian.billdueber.com/new-interest-in-marc-hash-json/
[2] http://yaml.org/type/pairs.html

JSON:

[
{ "leader" : "leader string" },
{ "001" : "001 value" },
{ "002" : "002 value" },
{ "010" :
    [
    { "ind1": " " },
    { "ind2": " " },
    { "a"   : "68009499" }
    ]
}
{ "035" :
    [
    { "ind1": " " },
    { "ind2": " " },
    { "a"   : "(RLIN)MIUG0000733-B" },
    ]
}
{ "035" :
    [
    { "ind1": " " },
    { "ind2": " " },
    { "a"   : "(CaOTULAS)159818014" },
    ]
}
{ "245" :
    [
    { "ind1": "1" },
    { "ind2": "0" },
    { "a"   : "Capitalism, primitive and modern;" },
    { "b"   : "some aspects of Tolai economic growth" },
    { "c"   : "[by] T. Scarlett Epstein." }
    ]
}
]

YAML:

- leader: "leader string"
- 001: "001 value"
- 002: "002 value"
- 010:
  - ind1: " "
  - ind2: " "
  - a: "68009499:
- 035:
  - ind1: " "
  - ind2: " "
  - a: "(RLIN)MIUG0000733-B"
- 035:
  - ind1: " "
  - ind2: " "
  - a: "(CaOTULAS)159818014"
- 245:
  - ind1: "1"
  - ind2: "0"
  - a: "Capitalism, primitive and modern;"
  - b: "some aspects of Tolai economic growth"
  - c: "[by] T. Scarlett Epstein."


--
Bill Dueber
Library Systems Programmer
University Library, University of Michigan
734.615.0412

Reply via email to