[jsword-devel] Method to find if BibleBook is contained in a Book

Martin Denham mjdenham at gmail.com
Tue Mar 25 04:48:31 MST 2014

IBT have just passed me more information regarding their handling of empty
verses to help clarify if this is an IBT module issue or not.  The
following is an extract from IBT's e-mail:

Here are examples of how IBT's OSIS source defines empty verses in the

Empty book (Epistle of Jeremiah):
<div type="x-Synodal-non-canonical"><div type="book"
osisID="EpJer"><chapter osisID="EpJer.1"><verse sID="EpJer.1.1-72"
osisID="EpJer.1.1 EpJer.1.2 EpJer.1.3 EpJer.1.4 EpJer.1.5 EpJer.1.6
EpJer.1.7 EpJer.1.8 EpJer.1.9 EpJer.1.10 EpJer.1.11 EpJer.1.12 EpJer.1.13
EpJer.1.14 EpJer.1.15 EpJer.1.16 EpJer.1.17 EpJer.1.18 EpJer.1.19
EpJer.1.20 EpJer.1.21 EpJer.1.22 EpJer.1.23 EpJer.1.24 EpJer.1.25
EpJer.1.26 EpJer.1.27 EpJer.1.28 EpJer.1.29 EpJer.1.30 EpJer.1.31
EpJer.1.32 EpJer.1.33 EpJer.1.34 EpJer.1.35 EpJer.1.36 EpJer.1.37
EpJer.1.38 EpJer.1.39 EpJer.1.40 EpJer.1.41 EpJer.1.42 EpJer.1.43
EpJer.1.44 EpJer.1.45 EpJer.1.46 EpJer.1.47 EpJer.1.48 EpJer.1.49
EpJer.1.50 EpJer.1.51 EpJer.1.52 EpJer.1.53 EpJer.1.54 EpJer.1.55
EpJer.1.56 EpJer.1.57 EpJer.1.58 EpJer.1.59 EpJer.1.60 EpJer.1.61
EpJer.1.62 EpJer.1.63 EpJer.1.64 EpJer.1.65 EpJer.1.66 EpJer.1.67
EpJer.1.68 EpJer.1.69 EpJer.1.70 EpJer.1.71 EpJer.1.72"/><verse

I'm not sure how osis2mod handles all this when importing to the module,
but it works perfectly without warnings or errors. Also, when the resulting
module is passed to the "emptyvss" tool, it passes this test without

On 25 March 2014 11:38, Martin Denham <mjdenham at gmail.com> wrote:

> I am having problems getting a list of BibleBooks contained in some AV
> modules which we know do not contain certain books.  I can't work out if
> the problem is with JSword, the modules, or osis2mod.
> There are 2 related problems I can see:
>    1. book.contains(nonExistingVerse) returns TRUE
>    2. book.getRawText(nonExistingVerse) returns <chapter end tag>
> Here is a simple test to show the problem using KAZ which has Synodal v11n
> but does not contain any deuterocanonical books:
>      SwordBook kaz = (SwordBook)Books.installed().getBook("KAZ");
>      Verse esd11Verse = new Verse(kaz.getVersification(), BibleBook.ESD1,
> 1, 1);
>      System.out.println(kaz.contains(esd11Verse)); // prints: *true*
>      System.out.println(kaz.getRawText(esd11Verse)); // prints: *<chapter
> eID="gen7" osisID="1Esd.1"/>*
>      Verse esd12Verse = new Verse(kaz.getVersification(), BibleBook.ESD1,
> 1, 2);
>      System.out.println(kaz.contains(esd12Verse)); // prints: *true*
>      System.out.println(kaz.getRawText(esd12Verse)); // prints: *<chapter
> eID="gen7" osisID="1Esd.1"/>*
> So how does "<chapter eID="gen7" osisID="1Esd.1"/>" get into verse content
> unexpectedly?
> It seems to me like it could be either:
>    1. a module problem; but IBT say they do not add empty verse slots
>    2. Sword osis2mod issue
>    3. JSword issue: why is JSword returning a chapter end tag instead of
>    verse content
> Any ideas what might cause this problem?
> Thanks
> Martin
> On 11 March 2014 12:15, DM Smith <dmsmith at crosswire.org> wrote:
>> We haven't pushed this down into JSword. So far it is the responsibility
>> of the front-end. Chris B has made it efficient to ask a Book whether it
>> contains a Verse.
>> Essentially, when it comes to asking a module if it has meaningful
>> content, you want containsAny(Key verses, boolean includeIntros) and
>> containsAny(Key verses) { return containsAny(verses, false); }
>> I think it should ignore verse 0 by default. If it doesn't have verse
>> content, then does the content really mean something?
>> As you have noted contains(Key) is confusing. There are a few places
>> where it means containsAny. Usually it means containAll. The name,
>> contains, was chosen early as we derived from a container class where the
>> argument was an element of the container.  That is, contains is supposed to
>> mean isMemberOf. Later we changed the inheritance as it wasn't an "is a"
>> relationship.
>> But we need to be careful of not introducing more confusion.
>> By the way, the list serve was holding mail for a few days.
>> In Him,
>>         DM
>> On Mar 8, 2014, at 5:26 PM, Martin Denham <mjdenham at gmail.com> wrote:
>> > Is there an efficient way to find if a BibleBook is contained in a Book
>> (Bible or commentary) using JSword?
>> >
>> > I recall this subject being discussed but can't recall the outcome.
>> >
>> > Thanks
>> > Martin
>> > _______________________________________________
>> > jsword-devel mailing list
>> > jsword-devel at crosswire.org
>> > http://www.crosswire.org/mailman/listinfo/jsword-devel
>> _______________________________________________
>> jsword-devel mailing list
>> jsword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/jsword-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.crosswire.org/pipermail/jsword-devel/attachments/20140325/45f53fa9/attachment-0001.html>

More information about the jsword-devel mailing list