in src/main/java/org/apache/sling/hapi/client/impl/microdata/MicrodataDocument.java [203:241]
private ItemImpl follow(Element el, MicrodataDocument doc) throws ClientException {
if (el.hasAttr("itemscope")) {
return new ItemImpl(el, doc);
}
if (el.tagName().equalsIgnoreCase("a") && el.hasAttr("href")) {
String href = el.attr("href");
if (href.startsWith("#")) {
Element first = el.ownerDocument().select(href).first();
return first == null ? null : follow(first, doc);
}
String absHref = el.attr("abs:href");
MicrodataDocument d = (MicrodataDocument) doc.client.get(absHref);
try {
URI uri = new URI(absHref);
String fragment = uri.getRawFragment();
if (fragment != null) {
Element e = d.jsoupDocument.getElementById(fragment);
return e == null ? null : follow(e, d);
}
} catch (URISyntaxException ex) {
throw new ClientException("Error parsing URI: " + absHref, ex);
}
ItemsImpl items = (ItemsImpl) d.items();
if (items.length() == 1) {
return (ItemImpl) items.at(0);
}
throw new ClientException("Unable determine item: " + absHref);
}
return new ItemImpl(el, doc);
}