[ https://issues.apache.org/jira/browse/TIKA-367?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chris A. Mattmann resolved TIKA-367. ------------------------------------ Resolution: Fixed - fixed in r901066. Updated tika-mimetypes.xml too with improvements to XHTML and RDF detection leveraging the new comparison code present in this patch. > Mime type rootXML equality improvement > -------------------------------------- > > Key: TIKA-367 > URL: https://issues.apache.org/jira/browse/TIKA-367 > Project: Tika > Issue Type: Improvement > Components: mime > Affects Versions: 0.5 > Environment: My local MacBook pro > Reporter: Chris A. Mattmann > Assignee: Chris A. Mattmann > Fix For: 0.6 > > > While working on TIKA-357 and TIKA-366, I noticed (and Ken did too) that > XHTML detection was no longer working in his regression test within > o.a.tika.parser.html.HtmlParserTest#testXhtmlParsing. The cause of this has > to do with the fix for TIKA-327. Because I used namespaceless html and link > tags as valid root XML for the text/html mime type, text/html was now > matching for the application/html+xml example that Ken had previously > included in o.a.tika.parser.html.HtmlParserTest#testXhtmlParsing. Phew. You > still with me? OK, so if you are, it turns out that the reason it failed was > due to the rootXML matches rules that were being employed. The code boiled > down to: > boolean matches(String namespaceURI, String localName) { > //Compare namespaces > if (!isEmpty(this.namespaceURI)) { > if (!this.namespaceURI.equals(namespaceURI)) { > return false; > } > } > //Compare root element's local name > if (!isEmpty(this.localName)) { > if (!this.localName.equals(localName)) { > return false; > } > } > return true > } > The issue with this block is that this version of the #matches function is > too lenient. So lenient, to the point of declaring one root-XML match for a > localName "html" with no namespace superseded another root-XML with a > localName "html", and that included a namespace. This isn't the behavior we > want. To alleviate this we should check if this.namespaceURI and > this.localName are empty (e.g., put in an else block above) and make sure > that if they are, the provided namespaceURI and localName are empty as well > in order to return true. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.