Ticket #298 (closed defect: fixed)

Opened 5 years ago

Last modified 5 years ago

Annotation Boundary Error

Reported by: rich Assigned to: pradeep
Priority: critical Milestone:
Component: ambra Version:
Keywords: xpointer Cc:
Blocking: Blocked By:

Description (Last modified by ronald)

When trying to view: http://www.plosone.org/article/fetchArticle.action?articleURI=info%3Adoi%2F10.1371%2Fjournal.pone.0000245

Annotation author is: Rafael.Garcia@ars.usda.gov

The following java exception is thrown on plosone01:

2007-03-05 16:19:07,207 DEBUG AnnotationWebService> retrieved annotation list from cache for target: info:doi/10.1371/journal.pone.0000245 [TP-Processor2 org.plos.annotation.service.AnnotationWebService]
2007-03-05 16:19:08,419 ERROR FetchArticleService> Transformation of article failed [TP-Processor2 org.plos.article.service.FetchArticleService]
java.rmi.RemoteException: ; nested exception is:
        com.sun.org.apache.xerces.internal.dom.RangeExceptionImpl: BAD_BOUNDARYPOINTS_ERR: The boundary-points of a Range do not meet specific requirements.
        at org.plos.annotation.service.Annotator.annotateAsDocument(Annotator.java:95)
        at org.plos.article.service.FetchArticleService.applyAnnotationsOnContentAsDocument(FetchArticleService.java:393)
        at org.plos.article.service.FetchArticleService.getAnnotatedContentAsDocument(FetchArticleService.java:383)
        at org.plos.article.service.FetchArticleService.getAnnotatedContentAsDocument(FetchArticleService.java:376)
        at org.plos.article.service.FetchArticleService.getAnnotatedContentAsDOMSource(FetchArticleService.java:320)
        at org.plos.article.service.FetchArticleService.getTransformedArticle(FetchArticleService.java:92)
        at org.plos.article.service.FetchArticleService.getURIAsHTML(FetchArticleService.java:135)
        at org.plos.article.service.FetchArticleService$$FastClassByCGLIB$$4912ea24.invoke(<generated>)
        at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
        at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:674)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
        at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:126)
        at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:114)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
        at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:615)
        at org.plos.article.service.FetchArticleService$$EnhancerByCGLIB$$cf10ccca.getURIAsHTML(<generated>)
        at org.plos.article.action.FetchArticleAction.execute(FetchArticleAction.java:41)
        at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:364)
        at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:216)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
        at org.plos.user.EnsureUserAccountInterceptor.intercept(EnsureUserAccountInterceptor.java:44)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:168)
        at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:115)
        at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:171)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.webwork.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:147)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.TimerInterceptor.invokeUnderTiming(TimerInterceptor.java:131)
        at com.opensymphony.xwork.interceptor.TimerInterceptor.intercept(TimerInterceptor.java:118)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)
        at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:225)
        at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
Caused by: com.sun.org.apache.xerces.internal.dom.RangeExceptionImpl: BAD_BOUNDARYPOINTS_ERR: The boundary-points of a Range do not meet specific requirements.
        at com.sun.org.apache.xerces.internal.dom.RangeImpl.surroundContents(RangeImpl.java:692)
        at org.topazproject.dom.ranges.SelectionRangeList.surroundContents(SelectionRangeList.java:95)
        at org.plos.annotation.service.Annotator.annotate(Annotator.java:123)
        at org.plos.annotation.service.Annotator.annotateAsDocument(Annotator.java:93)
        ... 77 more
2007-03-05 16:19:08,420 WARN  UnhandledException> Transformation of article failed [TP-Processor2 org.plos.UnhandledException]
org.plos.ApplicationException: Transformation of article failed
        at org.plos.article.service.FetchArticleService.getTransformedArticle(FetchArticleService.java:104)
        at org.plos.article.service.FetchArticleService.getURIAsHTML(FetchArticleService.java:135)
        at org.plos.article.service.FetchArticleService$$FastClassByCGLIB$$4912ea24.invoke(<generated>)
        at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
        at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:674)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
        at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:126)
        at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:114)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
        at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:615)
        at org.plos.article.service.FetchArticleService$$EnhancerByCGLIB$$cf10ccca.getURIAsHTML(<generated>)
        at org.plos.article.action.FetchArticleAction.execute(FetchArticleAction.java:41)
        at sun.reflect.GeneratedMethodAccessor109.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:364)
        at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:216)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
        at org.plos.user.EnsureUserAccountInterceptor.intercept(EnsureUserAccountInterceptor.java:44)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:168)
        at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:115)
        at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:171)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.webwork.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:147)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.TimerInterceptor.invokeUnderTiming(TimerInterceptor.java:131)
        at com.opensymphony.xwork.interceptor.TimerInterceptor.intercept(TimerInterceptor.java:118)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186)
        at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
        at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)
        at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:225)
        at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.rmi.RemoteException: ; nested exception is:
        com.sun.org.apache.xerces.internal.dom.RangeExceptionImpl: BAD_BOUNDARYPOINTS_ERR: The boundary-points of a Range do not meet specific requirements.
        at org.plos.annotation.service.Annotator.annotateAsDocument(Annotator.java:95)
        at org.plos.article.service.FetchArticleService.applyAnnotationsOnContentAsDocument(FetchArticleService.java:393)
        at org.plos.article.service.FetchArticleService.getAnnotatedContentAsDocument(FetchArticleService.java:383)
        at org.plos.article.service.FetchArticleService.getAnnotatedContentAsDocument(FetchArticleService.java:376)
        at org.plos.article.service.FetchArticleService.getAnnotatedContentAsDOMSource(FetchArticleService.java:320)
        at org.plos.article.service.FetchArticleService.getTransformedArticle(FetchArticleService.java:92)
        ... 72 more
Caused by: com.sun.org.apache.xerces.internal.dom.RangeExceptionImpl: BAD_BOUNDARYPOINTS_ERR: The boundary-points of a Range do not meet specific requirements.
        at com.sun.org.apache.xerces.internal.dom.RangeImpl.surroundContents(RangeImpl.java:692)
        at org.topazproject.dom.ranges.SelectionRangeList.surroundContents(SelectionRangeList.java:95)
        at org.plos.annotation.service.Annotator.annotate(Annotator.java:123)
        at org.plos.annotation.service.Annotator.annotateAsDocument(Annotator.java:93)
        ... 77 more

Dependency Graph

Attachments

pone.15.xml (65.5 kB) - added by ronald on 03/10/07 04:40:03.
10.1371/journal.pone.0000015, after ingest
test.bsh (1.5 kB) - added by ronald on 03/10/07 04:41:55.
simple beanshell script to test and reproduce problem. Adjust paths at top before use.

Change History

03/05/07 20:28:59 changed by ronald

  • description changed.

03/06/07 11:08:44 changed by stevec

This problem occurs when one annotates across sections of a document (i.e. sections as defined in the XML Doc).

03/06/07 11:11:22 changed by stevec

  • owner changed from stevec to ronald.

I tried this on an old article on merlin, and it worked fine. I tried pointing different plosone front ends to merlin, and it worked fine. Then I deleted annotations on the article and deleted the article. I re-ingested the article, and then things atarted failing. The xpointer strings being passed seem to be very similar (a few chars off because of the lack of whitespace now), and all the code that does the resolution and creation is the same. Did something change on ingest that would cause this?

03/07/07 19:20:53 changed by ronald

  • owner changed from ronald to stevec.

How old is old? I'm guessing this is related to the fact that there is less whitespace in the articles (see [2309]), but I don't see what it has to do with ingest per se - the resulting xml document is obviously valid. But the xpointer expression must be off. The spec gives an example: http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Surrounding

Do have a sample (exact) xpointer expression and article?

03/08/07 10:10:42 changed by stevec

  • owner changed from stevec to ronald.

I don't know how old. I don't know when the articles were ingested.

The resulting xpointer expression does not appear to be off as far as I can tell. I've counted the characters and looked at the xpointer, and they appear to be valid.

article 15 on merlin. there's only one annotation (I just put it on) Context below:

info:doi/10.1371/journal.pone.0000015#xpointer(string-range(/article[1]/body[1]/sec[3]/p[4], '')[511]/range-to(string-range(/article[1]/body[1]/sec[4]/sec[1]/sec[1]/p[1], '')[38])) 

The first point has 651 characters in the paragraph and the ending point has well over 38 characters. The rest of the expression looks OK to me, but let me know if you something wrong.

03/08/07 11:00:06 changed by stevec

Also, this same expression (+/- a few characters) worked previously.

03/10/07 04:00:39 changed by ronald

Thanks for the example. This is easily reproducible. And if I pretty-print the article (run it through 'xmllint --format') it works correctly; what comes out in this case is:

      <p>Moreover, the analysis of signal transduction on a discrete single cell is still difficult or impossible under the colony-forming conditions because intercellular cross talk cannot be discounted. Thus, the new culture system presented here does not pose the same problems as cells can be maintained singly, which is beneficial for the investigation of signalling pathways and cell responses to growth factors, cytokines, and drugs using single cell-based assays. Importantly, the establishment of an efficient <aml:annotated aml:first="true" aml:id="1">mouse ES cell culture system will allow investigation of many physiological mechanisms in development and cell behaviour in vivo or in vitro.</aml:annotated></p><aml:annotated aml:id="1">
    </aml:annotated></sec><aml:annotated aml:id="1">
    </aml:annotated><sec id="s4"><aml:annotated aml:id="1">
      <title>Materials and Methods</title>
      </aml:annotated><sec id="s4a"><aml:annotated aml:id="1">
        <title/>
        </aml:annotated><sec id="s4a1"><aml:annotated aml:id="1">
          <title>Cell culture</title>
          </aml:annotated><p><aml:annotated aml:id="1">For all cultures, feeder-free murine </aml:annotated>ES cells (EB3, R1) were used. EB3 cells or R1 cells were maintained on 0.1% gelatin-coated surfaces in KNOCKOUT-DMEM (Invitrogen), supplemented with 1 mM L-glutamine, 1% nonessential amino acids (Invitrogen), 0.1 mM β-mercaptoethanol (Sigma Chemical), 10 or 20% (vol/vol) foetal bovine serum (FBS) and 1,000 or 5,000 units/ml ESGRO (Chemicon), respectively. Cells were passaged every 2 or 3 days with 0.25% trypsin-1.0 mM EDTA solution (Invitrogen). All media contained 50 µg/ml penicillin, 50 µg/ml streptomycin, and 100 µg/ml neomycin.</p>

Looking at this, I'm thinking the problem is related to the fact that if it's not pretty-printed then those additional <aml:annotated> sections between the tags would be empty.

In any case it's neither a bug with ingest nor with plosone, but somewhere with the xpointer handling code.

03/10/07 04:38:48 changed by ronald

  • keywords set to xpointer.
  • owner changed from ronald to pradeep.

Ok, this is a bug in SelectionRange.getSurroundableRanges(). In the working case the last range is:

  range.toString(): 'mouse ES cell culture system will allow investigation of many physiological mechanisms in development and cell behaviour in vivo or in vitro.'
  range.getStartContainer(): '[#text: Moreover, the analysis of signal transduction on a discrete single cell is still difficult or impossible under the colony-forming conditions because intercellular cross talk cannot be discounted. Thus, the new culture system presented here does not pose the same problems as cells can be maintained singly, which is beneficial for the investigation of signalling pathways and cell responses to growth factors, cytokines, and drugs using single cell-based assays. Importantly, the establishment of an efficient mouse ES cell culture system will allow investigation of many physiological mechanisms in development and cell behaviour in vivo or in vitro.]'
  range.getStartOffset(): 510
  range.getEndContainer(): '[p: null]'
  range.getEndOffset(): 1
  range.getCollapsed(): false
  range.getCommonAncestorContainer(): '[p: null]'

In the failure case we get this (and it's the first range that's failing):

  range.toString(): 'mouse ES cell culture system will allow investigation of many physiological mechanisms in development and cell behaviour in vivo or in vitro.Materials and MethodsCell culture'
  range.getStartContainer(): '[#text: Moreover, the analysis of signal transduction on a discrete single cell is still difficult or impossible under the colony-forming conditions because intercellular cross talk cannot be discounted. Thus, the new culture system presented here does not pose the same problems as cells can be maintained singly, which is beneficial for the investigation of signalling pathways and cell responses to growth factors, cytokines, and drugs using single cell-based assays. Importantly, the establishment of an efficient mouse ES cell culture system will allow investigation of many physiological mechanisms in development and cell behaviour in vivo or in vitro.]'
  range.getStartOffset(): 510
  range.getEndContainer(): '[sec: null]'
  range.getEndOffset(): 1
  range.getCollapsed(): false
  range.getCommonAncestorContainer(): '[body: null]'

i.e. the range extends through the next section headers (note the extra stuff at the end of range.toString() and the end-container).

Handing this over to Pradeep now, and attaching the article and a simple beanshell script to reproduce this.

03/10/07 04:40:03 changed by ronald

  • attachment pone.15.xml added.

10.1371/journal.pone.0000015, after ingest

03/10/07 04:41:55 changed by ronald

  • attachment test.bsh added.

simple beanshell script to test and reproduce problem. Adjust paths at top before use.

03/12/07 10:16:39 changed by stevec

if there's a way to remove the additional aml:annotated tags where they appear between sections, that would be ideal for us since having them causes me to insert extra tags in the html when I run it through my xslt currently. This results in extra spaces between paragraphs. I guess I could try to look for tags with no content, but if it is possible (and correct) to remove the extra tags, that would be great.

03/12/07 14:23:18 changed by pradeep

  • status changed from new to closed.
  • resolution set to fixed.

(In [2426]) Fix #298. Only siblings can be combined when consolidating surroundable regions.

03/12/07 14:43:43 changed by pradeep

This is in response to Steve's comment. The tagging now looks like this for the xpointer expression and article that is mentioned earlier:

 <aml:annotated aml:first="true" aml:id="1
">mouse ES cell culture system will allow investigation of many physiological mechanisms in developmen
t and cell behaviour in vivo or in vitro.</aml:annotated></p></sec><sec id="s4"><aml:annotated aml:id=
"1"><title>Materials and Methods</title></aml:annotated><sec id="s4a"><aml:annotated aml:id="1"><title
/></aml:annotated><sec id="s4a1"><aml:annotated aml:id="1"><title>Cell culture</title></aml:annotated>
<p><aml:annotated aml:id="1">For all cultures, feeder-free murine </aml:annotated>

Note that the structure of the document is such that further optimization is not possible. So you would have the 5 regions in this case.

08/07/07 16:25:51 changed by

  • milestone deleted.

Milestone Bugs deleted