[osis-core] One last time on osisID, osisRef, work, referenceSystem, etc...

Todd Tillinghast osis-core@bibletechnologieswg.org
Tue, 26 Nov 2002 11:49:35 -0700


On Friday afternoon, we were able to hammer out a much of the ambiguity
related to osisID and osisRef.  The remaining issue was how to separate
the <work> element that represents THIS document and how to allow the
THIS work to have multiple reference systems with their own "alias",
while allowing other <work> elements to only have at most one
<referenceSystem> element.  I took the liberty in the example below of
having the THIS <work> element be the single <work> element under
<osisText> and adding the possibility for multiple <referenceSystem>
elements with a name attribute that matches up with the prefix in front
of an osisID value.

(osisIDWork would have a more clear meaning if it were osisIDRefSystem
since there is only one THIS work element and the prefix of an osisID
serves only to identify the reference system to which the identifier
belongs.)

Resolutions regarding references, osisRef, and related topics:

1) Every VALID reference will have either 
    A) A corresponding <work> entry in the header to match the "prefix"
of the reference AND the matching <work> element MUST have at least a
<referenceSystem> element.  
    B) OR a corresponding name attribute in a <referenceSystem> element
in the work element that represents THIS document.

2) A reference points to ANY document that exactly matches ALL of the
Dublin Core entries within the <work> element of the referring document.
Elements omitted OR encoded with a "*" character do not require a match
in the target document.

3) If no "prefix" is provided in an osisRef attribute, the prefix
defaults to the value of the osisRefWork attribute in <osisText>.

4) If no value is provided for osisRefWork attribute in <osisText> then
the default a <work> element with ONLY
<referenceSystem>Bible</referenceSystem> as a child element is implied.
(No default value for osisRefWork should be specified to avoid
confusion.)

5) The prefix of every VALID self identifier (osisID value) MUST have a
corresponding "name" attribute in a <referenceSystem> element in the
work element that represents THIS document.

6) The values for the <referenceSystem> element in <work> elements that
represent other works as well as in the <work> element that represents
THIS document will either:
   A) be one of the values defined by OSIS OR
   B) be prefixed by an "x-" to imply that it is a non-standard
reference system name.


Example:
<osisCorpus>
   <osisText osisIDWork="ghi" osisRefWork="jkl">
      <header>
          <thisWork> <!-- no need for a osisWork attribute -->
              ... Dublin Core elements ...
             <referenceSystem name="def">Bible.DEF</referenceSystem> 
             <referenceSystem name="ghi">Bible.GHI</referenceSystem>
          </thisWork>
          <work osisWork="jkl">
             <referenceSystem>Bible</reference>
          </work>
          <work osisWork="mno">
             <title>The MNO Bible</title>
          </work>
          <work osisWork="xyz">
             <title>The XYZ Bible</title>
             <referenceSystem>x-NonStandardReferenceSystem</reference>
          </work>
          <work osisWork="abc">
             <title>The ABC Bible</title>
             <publisher>The ABC Publishing Company</publisher>
             <date>2002</date>
             <referenceSystem>Bible</reference>
          </work>
          <work osisWork="fr">
             <title>The ABC Bible</title>
             <publisher>The ABC Publishing Company</publisher>
             <date>2002</date>
             <referenceSystem>Bible.FR</reference>
          </work>
      </header>
      <div>

          <!-- a valid osisID because def is defined in the THIS WORK
-->
          <!-- a valid osisID because ghi is defined in the THIS WORK
-->
          <!--    AND ghi is the default osisIDWork
-->
          <verse osisID="Ps.1.1 def:Ps.1.1">...</verse>

          <!-- an invalid osisID because xyz IS NOT defined in THIS
WORK-->
          <verse osisID="xyz:Ps.1.1">...</verse>

          <!-- an invalid osisID because xyz IS NOT defined in THIS
WORK-->
          <verse osisID="xyz:Ps.1.1">...</verse>

          <!-- using the default work, a reference to ANY work in   -->
          <!--    which I can find a match for                      -->
          <!--    Ps.1.1 as defined by the reference system "Bible" -->
          <reference osisRef="Ps.1.1"/> 

          <!-- reference to THIS work using Ps.1.1                  -->
          <!--    as defined by the reference system "Bible.DEF"    -->
          <reference osisRef="def:Ps.1.1"/> 

          <!-- reference to THIS work using Ps.1.1                  -->
          <!--    as defined by the reference system "Bible.GHI"    -->
          <reference osisRef="ghi:Ps.1.1"/> 

          <!-- reference to ANY work with a title "The XYZ Bible"   --> 
          <!--    in which I can find a match for                   -->
          <!--    Ps.1.1 as defined by the non standard reference   -->
          <!--    system " x-NonStandardReferenceSystem" -->
          <reference osisRef="xyz:Ps.1.1"/>

          <!-- reference to ANY work with a title "The ABC Bible"   -->
          <!--    a publisher "The ABC Publishing Company"          -->
          <!--    and a date of "2002"                              --> 
          <!--    in which I can find a match for                   -->
          <!--    Ps.1.1 as defined by the reference system "Bible" -->
          <reference osisRef="abc:Ps.1.1"/>      
      
          <!-- reference to ANY work with a title "The ABC Bible"   -->
          <!--    a publisher "The ABC Publishing Company"          -->
          <!--    and a date of "2002"                              --> 
          <!--    in which I can find a match for                   -->
          <!--    Ps.1.1 as defined by the ref system "Bible.FR"    -->
          <reference osisRef="fr:Ps.1.1"/>      

          <!-- An invalid reference because there is no             -->
          <!--    <referenceSystem> element in the corrosponing work-->
          <reference osisRef="mno:Ps.1.1"/>      

          <!-- An invalid reference because there is no             -->
          <!--    corrosponing work element in the header           -->
          <reference osisRef="pqr:Ps.1.1"/>      
      </div>
   </osisText>
</osisCorpus>

(Patrick, tried to be as terse as possible.  My apology if this seems to
long.)

Note: the only change to the schema is the addition of a <work> element
(zero or one instances) to <osisText> AND allowing ONLY that <work>
element to have MULTIPLE <referenceSystem> elements that have a "name"
attribute.  (The other change is possibly renaming osisIDWork to
osisIDReferenceSystem in <osisText> because the ID <work> is now obvious
only the reference system within that work is possibly ambiguous.)

Does this work for everyone?

Todd