OpenSearch-совместимый ответ от Java
Вот пример файла описания OpenSearch:
http://webcat.hud.ac.uk/OpenSearch.xml
Когда я отправляю запрос как этот:
http://webcat.hud.ac.uk/perl/opensearch.pl?keyword=new&startpage=1&itemsperpage=20
Я получаю ответ, совместимый с OpenSearch. Как я могу реализовать спецификацию OpenSearch в Java или есть какая-нибудь библиотека для нее или есть какой-нибудь xsd, из которого я могу сгенерировать код Java?
2 ответа
Согласно разделу "Чтение OpenSearch" на веб - сайте OpenSearch, существует библиотека Java, которая может сделать это, называемая Apache Abdera. Я не использовал его сам, поэтому я не могу комментировать его качество, но это стоит посмотреть - очевидно, он может интерпретировать и создавать отклики OpenSearch, так что это может быть именно то, что вы ищете.
В качестве альтернативы, существует довольно много очень хороших парсеров XML для Java (см. Этот вопрос для некоторых предложений), поэтому написание собственного парсера для простого XML-файла OpenSearch не должно быть слишком сложным, поскольку полная спецификация доступна в Интернете.
Что касается XSD, я не могу найти "официальный", однако есть XSD для OpenSearch в различных проектах с открытым исходным кодом, которые были протестированы и вы можете использовать, например, этот, который является частью проекта под названием "OpenSearch". Validator ".
Другим потенциальным выбором для написания результатов OpenSearch является очень зрелая и широко используемая библиотека Apache Lucene, которая находится в списке программного обеспечения, "пишущего результаты OpenSearch" на ранее связанном веб-сайте OpenSearch.
ROME также поддерживает OpenSearch с его модулем ROME A9 OpenSearch.
Пример использования:
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(feedType);
// Add the opensearch module, you would get information like totalResults from the
// return results of your search
List mods = feed.getModules();
OpenSearchModule osm = new OpenSearchModuleImpl();
osm.setItemsPerPage(1);
osm.setStartIndex(1);
osm.setTotalResults(1024);
osm.setItemsPerPage(50);
OSQuery query = new OSQuery();
query.setRole("superset");
query.setSearchTerms("Java Syndication");
query.setStartPage(1);
osm.addQuery(query);
Link link = new Link();
link.setHref("http://www.bargainstriker.com/opensearch-description.xml");
link.setType("application/opensearchdescription+xml");
osm.setLink(link);
mods.add(osm);
feed.setModules(mods);
// end add module