2017-01-15 12 views
1

Я пытаюсь прочитать XML-файл, используя Jena. и обычно он работает.читать RDF/XML из url в Jena

final String url = "http://www.bbc.co.uk/nature/life/Human"; 
    Model model = ModelFactory.createDefaultModel();  
    model.read(url, "RDF/XML"); 

, но когда я пытаюсь использовать другой URL, если абзац содержит br или ссылку. это дает мне эту ошибку.

Exception in thread "main" org.apache.jena.riot.RiotException: [line: 25, col: 6 ] {E202} Cannot have both string data "Great white sharks are at the very top of the marine food chain. Feared as man-eaters, they are only responsible for about 5-10 attacks a year, which are rarely fatal. Great whites are ultimate predators. Powerful streamlined bodies and a mouth full of terrifyingly sharp, serrated teeth, combine with super senses that can detect a single drop of blood from over a mile away. Hiding from a great white isn't an option as they can detect and home in on small electrical discharges from hearts and gills. Unlike most other sharks, live young are born that immediately swim away. 
" and XML data <br> inside a property element. Maybe you want rdf:parseType='Literal'. 

это ссылка на второй ситуации, когда Jena бросить эту ошибку http://www.bbc.co.uk/nature/life/Great_white_shark

, что я должен сделать, чтобы игнорировать это.

ответ

2

Проблема заключается в данных на сайте BBC; <br/> должен быть экранирован как &lt;br/&gt;, чтобы поместить разметку HTML в строковое значение. В RDF/XML строковое значение не может иметь необработанную разметку для простой строки.

К сожалению, сайт BBC не полностью обрабатывает контент-переговоры: запрос о черепахе или N-тройках получает страницу XHMTL.

Вам нужно будет загрузить файл с помощью обычного HTTP-запроса с заголовком Accept: application/rdf+xml, исправить содержимое и проанализировать его с фиксированной версии. Один из способов сделать это - прочитать его в строке Java, сделать регулярное выражение, чтобы заменить <br/> на &lt;br/&gt;, а затем проанализировать строку.