Abstract:
In one aspect, the invention comprises a computer system for searching databases and displaying search results, comprising databases storing information regarding publications and authors comprising author, title, date of publication, cited references, and citing references data; and Internet servers in communication with those databases; wherein at least one of those Internet servers is in communication with and operable to transmit data to a Web browser resident on a user&#39;s computer, and wherein the data is sufficient to enable the browser to display a citation overview page comprising: (a) a list of one or more titles of publications or names of authors, and (b) one or more displayed numerals representing how many publications in one or more specified categories cite to each of the publications, or, for author names, how many publications in one or more specified categories cite to publications on which those names are listed as authors.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit of U.S. Provisional Application No. 60/622,710, filed Oct. 27, 2004. The entire contents of that provisional application are incorporated herein by reference. 
    
    
     BACKGROUND &amp; SUMMARY 
     In one aspect, the present invention comprises a document citation overview tool (CTO) that allows users to see how often documents from different resources (particular authors, journals or record baskets) have been cited in a selected year range. CTO fulfills a need in the scientific market for easy to use tools for bibliometric analyses. 
     On the document citation overview page (see  FIG. 1 ), a two-dimensional table is used to display citation counts. There are varieties of citation counts provided by this table:
         By selected document and selected year (cell value)   By selected document and selected year range (row total)   By all selected documents and per selected year (column total)   By all selected documents and selected year range (grand total)       

     Thousands of documents may be analyzed together. Users can select a year range, configure the number of documents displayed on each page if multiple pages are needed for display, and navigate pages through “previous” and “next” buttons. A citation weight may be displayed that shows the number of citations (grand total) divided by the number of all selected documents for the selected year range. 
     Users also may save a document set into a saved basket and access a cited-by-result list by clicking a citation count to display all citations associated with that count. In various embodiments, in addition to using dimensions of document and year, users can search on other parameters (author names, institutes, journal names, subjects, etc.) in various combinations. 
     Although those skilled in the art will be able to make and use a citation tool and citation overview pages based on the functional description below, additional technical solutions to technical problems were required in order to have a citation tool capable of providing search results in a short period of time. Users typically are not satisfied with great results if those results take too long to obtain. Those technical solutions also are described herein. 
     A strategy that likely would have been used by those familiar with the prior art, would have been to use a naive XQuery approach for the citation queries. 
     Example 
     
       
         
               
             
           
               
                   
               
             
             
               
                 define function classifyCitedReferencesByYear($eid-list as item( )*) as 
               
               
                 item( )* 
               
               
                 { 
               
               
                  for $eid in $eid-list return 
               
               
                  &lt;eid id=“{$eid}”&gt; 
               
               
                   {classifyCitedReferenceByYear($ eid )} 
               
               
                  &lt;/eid&gt; 
               
               
                 } 
               
               
                 define function classifyCitedReferenceByYear($eid as item( )) as item( )* 
               
               
                 { 
               
               
                  let $allYears:= data(/ANI-RECORD 
               
               
                            [BIBLIOGRAPHY/reference/ref-info/refd- 
               
               
                 itemidlist/itemid[@idtype=“SCP”] = $eid] 
               
               
                             /ANI-SOURCE/publicationdate/year) 
               
               
                  let $uniqueYears := distinct-values($allYears) 
               
               
                  for $y in $uniqueYears 
               
               
                  return 
               
               
                  &lt;classification type=“year” value=“{$y}“ count= 
               
               
                  “{count(index-of($allYears,$y))}” /&gt; } 
               
               
                 &lt;eidList&gt; 
               
               
                  {classifyCitedReferencesByYear((eids go here)))} 
               
               
                 &lt;/eidList&gt; 
               
               
                   
               
             
          
         
       
     
     But this approach has several drawbacks: (1) the use of distinct-values( ) requires all values to be in memory simultaneously; (2) complex XPath expressions require post-filtering of data structures to confirm that index hits are correct; and (3) an I/O is required for every referring document, to fetch the year data. Clearly, this approach does not scale well. 
     Goals of the present invention include: (1) resolve a query entirely out of indexes; (2) minimize index-related disk I/O; and (3) minimize per-cell computation time. 
     The preferred solution, described below, is based on a strategy that: (a) uses xdmp:estimate( ) to constrain counting activities to index-only computation; and (b) uses a combination of index techniques to optimize the caching of the indexes so that steady-state evaluation of a query will resolve disk-free. 
     In one aspect, the present invention comprises a computer system for searching databases and displaying search results, comprising: one or more databases storing information regarding publications, the information comprising author, title, date of publication, cited references, and citing references data; and one or more Internet servers in communication with the one or more databases; wherein at least one of the one or more Internet servers is in communication with and operable to transmit data to a Web browser resident on a user&#39;s computer, and wherein the data is sufficient to enable the browser to display a citation overview page comprising: (a) a list of one or more titles of publications, and (b) one or more displayed numerals representing how many publications of one or more specified categories cite to each of the publications. 
     In various embodiments, in various combinations: (1) one or more specified categories correspond to publication years; (2) at least one of the one or more displayed numerals represents a grand total of how many publications of all specified categories citing to any of the listed publications; (3) the citation overview page comprises a citation weight display that represents the grand total divided by how many publications are listed on the citation overview page; (4) the displayed numerals are hyperlinks; and/or (5) the data is sufficient to enable the browser to display a cited by result page linked to one of the one or more displayed numerals and listing publications in a category corresponding to the one of the one or more displayed numerals. 
     In another aspect, the invention comprises a computer system for searching databases and displaying search results, comprising: one or more databases storing information regarding publications, the information comprising author, title, date of publication, cited references, and citing references data; and one or more Internet servers in communication with the one or more databases; wherein at least one of the one or more Internet servers is in communication with and operable to transmit data to a Web browser resident on a user&#39;s computer, and wherein the data is sufficient to enable the browser to display a citation overview page comprising: (a) a list of one or more names of authors, and (b) for each of the names, one or more numerals representing how many publications of one or more specified types cite to publications on which that name is listed as an author or co-author. 
     In various embodiments, in various combinations: (1) the one or more specified categories correspond to publication years; (2) at least one of the one or more displayed numerals represents a grand total of how many publications of all specified categories citing to any of the listed names of authors; (3) the citation overview page comprises a citation weight display that represents the grand total divided by how many names of authors are listed on the citation overview page; (4) the displayed numerals are hyperlinks; (5) the data is sufficient to enable the browser to display a cited by result page linked to one of the one or more displayed numerals and listing publications in a category corresponding to the one of the one or more displayed numerals; (6) the citation overview page comprises an exclude author self citations button operable to send a request to the at least one of the one or more Internet servers for data sufficient to enable the browser to display a citation overview page with excluded author self citations for a selected name of an author; (7) the citation overview page with excluded author self citations for a selected name of an author comprises a first displayed numeral representing how many publications in one of the specified categories cited to publications that list the selected name as an author; and/or (8) the citation overview page comprises a second displayed numeral representing how many publications in the one of the specified categories but not listing the name as an author cited to publications that list the name as an author. 
     In other embodiments: (1) at least one of the one or more databases is an XML-based database; (2) the XML-based database is operable to be searched using XQuery statements that count how many publications in a specified category cite to a specified publication; (3) at least one of the XQuery statements is written as an estimated XPath and unnecessary XPath steps are eliminated; and (4) at least one of the XQuery statements is written with one or more predicate indexes and at least one of the predicate indexes is remapped into memory. 
     Other aspects and embodiments of the invention will be apparent to those skilled in the art after reviewing the drawings, detailed description, and claims provided below. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  depicts a preferred document citation overview page. 
         FIG. 2  depicts a preferred author names list page. 
         FIG. 3  depicts a preferred source info page. 
         FIG. 4  depicts a preferred record basket page. 
         FIG. 5  depicts a preferred waiting page. 
         FIG. 6  depicts a preferred error page. 
         FIG. 7  depicts a preferred result page. 
         FIG. 8  depicts a preferred printer-friendly page. 
         FIG. 9  is an activity diagram summarizing preferred processes. 
         FIG. 10  depicts a preferred author search form page. 
         FIG. 11  depicts a preferred author search results page. 
         FIG. 12  depicts a preferred author citation overview page. 
         FIG. 13  depicts a preferred Exclude Author Self Citations page. 
         FIG. 14  depicts a preferred citation overview page with excluded author self citations. 
         FIG. 15  depicts a preferred My List page. 
         FIG. 16  depicts a preferred My List document citation overview page. 
         FIG. 17  depicts a preferred My List document citation overview page with a roll-over tool tip feature. 
         FIG. 18  depicts components of a preferred system implementing CTO. 
         FIG. 19  depicts sample test content. 
         FIGS. 20 &amp; 21  depict exemplary test results. 
     
    
    
     DETAILED DESCRIPTION OF PREFERRED EMBODIMENTS 
     Various embodiments of the present invention are described herein. For ease of reference, we refer to these embodiments collectively as “CTO.” However, as those skilled in the art will recognize, the invention itself is not limited to these embodiments or to particular details discussed herein. The scope of the invention is defined solely by the appended claims as presented and/or subsequently amended and by other claims that may be added later. 
     In one embodiment, CTO is used in conjunction with Scopus, a search tool that is also described in U.S. Provisional Patent Application No. 60/622,710, filed Oct. 27, 2004, and that may be found on the Scopus website at www.scopus.com. 
     A document citation overview page (described below) preferably can be accessed from the following locations on the Scopus website (although those skilled in the art will recognize that analogous pages on other search cites also work for linking to a document citation overview page): 
     1. From an Author Names List Page (See  FIG. 2 ) 
     Selecting the checkboxes  210  next to author names and clicking on a “citation overview” button  220  will bring users to the document citation overview page (see  FIG. 1 ). This page will contain all the documents from the selected authors. The year range is, by default, the last 3 years plus the current year. 
     2. From a Source Info Page (See  FIG. 3 ) 
     Clicking on a “citation overview” link  310  next to a volume/issue/year will bring users to the document citation overview page (see  FIG. 1 ). This page will contain all the documents from this volume/issue/year. The year range is, by default, the last 3 years plus the current year. 
     3. From a Record Basket Page (See  FIG. 4 ) 
     Selecting the checkboxes  410  next to documents in a record basket (current or saved) and clicking on a “citation overview” button  420  will bring users to the document citation overview page (see  FIG. 1 ). This page will contain all selected documents from that record basket. The year range is, by default, the last 3 years plus the current year, but may be adjusted. 
     Waiting Page 
     The citation analysis process is a computationally expensive operation and may be slow. A waiting page (see  FIG. 5 ) may be displayed before the analysis data is rendered. A stop button  510  is provided on the waiting page to allow a user to go back to the calling page. If, for example, 60 seconds is expected for the typical analysis process to be completed, a fixed 60-second progress bar may be shown on the page. If the process time exceeds a preset time (say, 80 seconds), an error page may be displayed (see  FIG. 6 ). A return button  610  on the error page works in a manner similar to the stop button  510  on the waiting page. 
     Citation Overview Page 
     Once the citation analysis data is ready, a document citation overview page (see  FIG. 1 ) is rendered. Information rendered on this page includes a two-dimensional table to display various citation counts (cell value  110 , row total  120 , column total  130  and grand total  140 ) associated with these documents. A citation weight  150  may be displayed, under the control of a system configuration variable, which represents the number of citations (grand total) divided by the number of documents  170  for the selected year range  160 . In  FIG. 1 , the citation weight has a value of 2.58 (grand total of 116 divided by number (45) of documents). 
     On the document citation overview page, selecting the start year or/and the end year from the corresponding dropdowns  160  and clicking “Update” button  180  will change the year range on the citation overview table and cause the citation analysis process to rerun against the newly selected year range. Selecting a number in the display documents dropdown  190  will change the maximum number of documents displayed per page. Clicking on the “previous” or “next” buttons will navigate through multiple pages. 
     Cited By Result Page 
     Clicking on a citation count link on the document citation overview page will bring users to a cited by result page (see  FIG. 7 ) which lists all citations associated with that citation count. This result page will have functionalities that a regular Scopus search result page has, along with an information summary  710  for the listed citing documents. 
     Printer-Friendly Page 
     Clicking the “print” button  185  on the document citation overview page will bring users to a “printer friendly” page (see  FIG. 8 ) that contains only the citation information in the current page (for the multi-page case)—not the whole table. This page also contains a copyright statement  810  and a date stamp  820 . 
     Saved Record Basket Page 
     Clicking on the “save to list” link  195  on the document citation overview page will save all documents involved in that citation overview analysis (across all pages for a multi-page case) into a saved record basket (see  FIG. 4 ). 
       FIG. 9  depicts an activity diagram summarizing the activities described above. EIDs are author IDs. 
     In another embodiment, a user first accesses an Author search form (see  FIG. 10 ) and types an author&#39;s name (in this example, “Brown”). An Author search results page then is displayed (see  FIG. 11 ), listing authors identified as corresponding to the entered search terms (in this example, all authors whose last name is (or begins with) “Brown”). 
     A user then selects one or more of the listed authors via the checkboxes  1110 . In this example, the author “Brownlee D. E.” was selected. All documents that cite publications of that author are listed on an author citation overview page (see  FIG. 12 ). 
     A user may click on an “Exclude Author Self Citations” button  1210  to have publications authored by the selected author (in this example, publications authored by “Brownlee D. E.”) excluded from the citation overview. If multiple authors were selected at the Author search results page (see  FIG. 11 ), then a user may select which of those authors are to have their self citations excluded (see  FIG. 13 ). 
     A citation overview page with excluded self citations is then displayed (see  FIG. 14 ). A list  1410  of authors with excluded self citations is displayed. The black citation numbers  1420  (larger font) are shown as hyperlinks to search results pages (see  FIG. 7 ). The gray numbers  1430  in parentheses are numbers of citations including self citations. The colors or other means used to distinguish these two citation counts are, of course, at the discretion of the system administrator. 
     In another embodiment, a user may access a citation overview page from a My List page of Scopus (see  FIG. 15 ). The user checks boxes  1510  corresponding to documents of interest and then clicks a “citation overview” button  1520 . This causes a My List document citation overview page to be displayed (see  FIG. 16 ). Citation data for each of the selected documents is displayed. 
       FIG. 17  illustrates how a user may mouse over a short document title to have an expanded description of the title displayed. 
     As discussed above, a preferred embodiment of CTO is based on a strategy that: (a) uses xdmp:estimate( ) to constrain counting activities to index-only computation; and (b) uses a combination of index techniques to optimize the caching of the indexes so that steady-state evaluation of a query will resolve disk-free. Constraints comprised: (a) one abstract per fragment and one fragment per abstract; and (b) beware potential double-counting of obsolete abstracts along with their updates. 
     xdmp:estimate( ) is a Mark Logic function. Mark Logic&#39;s XML-based servers and services are well-known to those skilled in the art. See the website MarkLogic.com, the contents of which are incorporated herein by reference for describing Mark Logic technology. That technology is not part of the claimed invention, but understanding of that technology lends context to certain aspects of the invention. 
     The desired optimization is based on reducing a query to its most elemental form and then optimizing in several steps. For each cell, we need to evaluate an XQuery expression of the following form: 
     xdmp:estimate(items published in year N that reference item with eid E) 
     The following is a representative XQuery statement (similar to SQL) used by CTO. 
     
       
         
               
               
             
           
               
                   
               
             
             
               
                   
                 xdmp:estimate( 
               
               
                   
                  //item 
               
               
                   
                  [.//year = $column-year] 
               
               
                   
                  [.//reference-id-scp = $eid] 
               
               
                   
               
             
          
         
       
     
     This code counts how many documents reference the current document for a given year. This is done by the following steps: 
     1) Find those documents that contain an element of reference-id-scp equal to the “eid” for the current document. 
     2) Within the documents selected from above, count those documents that contain an element of year equal to a given year value (e.g., 2000). 
     The first optimization step comprises writing the query as an estimated XPath: 
     
       
         
               
               
             
           
               
                   
               
             
             
               
                   
                 xdmp:estimate( 
               
               
                   
                  /xocs:doc/xocs:item/item 
               
               
                   
                   [bibrecord/head/source/publicationdate/year = $column-year] 
               
               
                   
                   [bibrecord/tail/reference/ref-info/refd-itemidlist/ 
               
               
                   
                             itemid[@idtype = “SCP”] = $eid] 
               
               
                   
                  ) 
               
               
                   
                   Next, we eliminate needless XPath steps to obtain the query: 
               
               
                   
                 xdmp:estimate( 
               
               
                   
                   //item 
               
               
                   
                    [.//year = $column-year] 
               
               
                   
                    [.//reference//itemid[@idtype = “SCP”] = $eid] 
               
               
                   
               
             
          
         
       
     
     Observe that: (a) the &lt;year&gt; element is uniquely used; (b) &lt;itemid&gt; occurs in both head and tail; and (c) evaluation of the second predicate is “unreliable” along two dimensions: reference//itemid and itemid[@attribute=value]=value. 
     The third optimization step comprises remapping the second predicate (by creating a new XML element in the Scopus abstracts) to achieve reliability: 
     
       
         
               
               
             
           
               
                   
               
             
             
               
                   
                 xdmp:estimate( 
               
               
                   
                  //item 
               
               
                   
                   [.//year = $column-year] 
               
               
                   
                   [.//reference-id-scp = $eid] 
               
               
                   
               
             
          
         
       
     
     Observe that: (a) now we&#39;re down to three index intersections per cell node; (b) //item index will be cached after the first cell; (c) [.//year=$column-year] index will be cached after the first row; and (d) [.//reference-id-scp=$eid] index will be fetched on a per row basis. 
     A “range index” is a Mark Logic specific capability, similar to indexes created in general for most relational databases (such as for Oracle). However, by leveraging a range index Mark Logic brings this entire index into memory when the Mark Logic server starts. In the above example, a range index would have been created for the eid. The Mark Logic server then uses a base operating system functionality (called memory maps) to resolve the lookups from the range index contained in memory. Although not essential to CTO, it is important that the index is brought into memory, since this will eliminate nearly all I/O processing for a query. By eliminating virtually all of the I/O (and keeping the indexes in memory) we are able to achieve high-speed performance for CTO. 
     Mark Logic&#39;s XML-based servers and services are well-known to those skilled in the art. See the website MarkLogic.com, the contents of which are incorporated herein by reference for describing Mark Logic technology. That technology is not part of the claimed invention, but understanding of that technology lends context to certain aspects of the invention. 
     A fourth preferred optimization step comprises cache optimization by memory mapping the range index second predicate: 
     
       
         
               
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 xdmp:estimate( 
                   
               
               
                   
                  //item 
               
               
                   
                   [.//year = $column-year] 
               
               
                   
                   [.//reference-id-scp = $eid] 
               
               
                   
                   
               
             
          
         
       
     
     Observe that all three indexes are now cached, and that only a small incremental cost is involved in sorting the memory mapped range index into document order prior to intersection. 
     Consideration of index intersections: 
                                                           xdmp:estimate(   Index size                                         //item   60,000,000             [.//year = $column-year]   2,400,000             [.//reference-id-scp = $eid]   30                        
indicates that performance is dominated by intersection with lengthy indexes. Also, note that range indexes require sorting before intersection.
 
     To ameliorate these problems, a fifth optimization step (or sub-steps thereof) may be used: 
     (1) Eliminate the dummy records: 
     
       
         
               
               
             
               
               
               
             
           
               
                   
                   
               
               
                   
                 Index Size 
               
               
                   
                   
               
             
             
               
                   
               
             
          
           
               
                   
                 //reference 
                 11,000,000 
               
               
                   
                 [.//year = $column-year] 
                 2,400,000 
               
               
                   
                 [.//reference-id-scp = $eid] 
                 30 
               
               
                   
                   
               
             
          
         
       
     
     (2) Eliminate the core records without references: 
     
       
         
               
               
             
               
               
               
             
           
               
                   
                   
               
               
                   
                 Index Size 
               
               
                   
                   
               
             
             
               
                   
               
             
          
           
               
                   
                 //reference 
                 11,000,000 
               
               
                   
                 [.//citation-year = $column-year] 
                 900,000 
               
               
                   
                 [.//reference-id-scp = $eid] 
                 30 
               
               
                   
                   
               
             
          
         
       
     
     (3) Eliminate the need to consider the core records at all: 
     
       
         
               
               
             
               
               
               
             
           
               
                   
                   
               
               
                   
                 Index Size 
               
               
                   
                   
               
             
             
               
                   
               
             
          
           
               
                   
                 //core-1997 
                 900,000 
               
               
                   
                  [.//reference-id-scp = $eid] 
                 30 
               
               
                   
                   
               
             
          
         
       
     
     Test Strategy: The actual data set is irrelevant to accurate modeling, since no I/O of actual items needs to be performed during query evaluation. Test approach: (a) construct full scale “simulated” datasets with matching (1:1) indexes for index terms used by CTO query; (b) benchmark full-flight query resolution against simulated datasets; and (3) consider impact of deltas in hardware setup between various locations. 
     Sample Test Content—see  FIG. 19 . 
     Test Assumptions 
     Basic assumptions: (a) 30M dummy records @ 1K each; (b) 18.5M core records without references @ 9K each; and (c) 11M core records with references @ 100K each. Also: 30 references per record average (slightly higher than 26/27)—implemented as though records have between 0 and 60 references. Distribution of records over years: assume 80% of records come from a 10 year span, and assume maximum of 8% of core records in a single year. Finally assume itemid[@idtype=“SCP”] element values are 32-bit positive integers. 
     Test Results—see  FIGS. 20 and 21 . 
     The tests assume 29,000,000 total records (Scopus abstracts) uniformly distributed through 10 forests across 2 dual CPU Solaris systems (SunFire v240s), separate single query evaluation server, all servers CIS 2.2-prealpha. Of these 29,000,000 records, 11,000,000 records contain reference information. 
     Below, a typical query will consist of the calculation of 100 cells. A cell would be equal the cross-section of 1 year value (e.g., 1996) and all of the references for a specified document for that given year. 
     The following query maps to the fourth optimization step: 
     xdmp:estimate(//item[.//year=$year][.//reference-id-scp=$eid]) 
     Query time (95% of queries): 280 ms; per cell: 2.8 ms. This query has been used in production. 
     The following query maps to the fifth optimization step, part 1 (eliminate the dummy records). 
     xdmp:estimate(//references[.//year=$year][.//reference-id-scp=$eid]) 
     Query time (95% of queries): 187 ms; per cell: 1.87 ms. 
     The following query maps to the fifth optimization, part 3 (eliminate the need to consider core records). 
     xdmp:estimate(//core-1997[.//reference-id-scp=$eid]) 
     Query time (95% of queries): 140 ms; per cell: 1.4 ms. 
     The “naïve” prior art query (see Background &amp; Summary discussion above) would not even run against a corpus of documents of this size. This is largely due to the number of physical I/Os that would have been required when resolving the prior art query. In essence, one I/O would have been required for nearly every document (containing references) in the corpus (in this case, nearly 11 million). Assuming 10 ms per physical I/O, and each of the 10 forests distributed on a separate disk, this would have led to the following approximated minimum query resolution time and per cell calculation times. 
     Query Time: 11,000 s (or approximately 180 minutes); per cell: 110 s (or approximately 1.8 minutes). 
     Clearly, the optimized query is significantly faster than the prior art query. Even when only the fourth optimization step is used, the search time per cell is reduced by (110 s-0.0028 s)/110 s=99.9975%. Put another way, the prior art query approach takes almost 40,000 times as long as the new approach (using the fourth optimization step). 
     Further speed improvement may be obtained using the fifth optimization step (or parts thereof). However, implementation of that step may require adding elements to the data, and this may be undesirable in some circumstances. The system can achieve consistent performance regardless of query type (and without the need to add additional elements to the data) without implementing the fifth step. 
     While particular elements, embodiments, and applications of the present invention have been shown and described, it should be understood that the invention is not limited thereto, since modifications may be made by those skilled in the art, particularly in light of the foregoing teaching. The appended claims are intended to cover all such modifications that come within the spirit and scope of the invention. Although multiple embodiments are described herein, those embodiments are not necessarily distinct—features may be shared across embodiments.