Вы можете это сделать. В настоящее время моя компания делает это с eXist-db, но те же правила применимы к BaseX, Sedna или Marklogic.
Вам нужно будет освоить XPath 2.0 и немного знать XQuery, а также избегать выполнения запросов, связанных с пространством имен.
Я думаю, вам нужно запросить данные из документов экземпляра XBRL. Это может быть сделано в два этапа: 1. Получить идентификатор контекста вы хотите запросить 2. Поиск фактов элемент в этом контексте
Этот запрос может сделать это с помощью одного вызова:
xquery version "3.0";
declare default element namespace"http://www.xbrl.org/2003/instance";
declare function local:for-context($node as node(),$ent as xs:string,$start as xs:string,$end as xs:string) as xs:boolean {
let $cid := $node/@contextRef
let $ctx := $node/../context[ @id = $cid ]
return if ($ctx
and not(exists($ctx/entity/segment))
and $ctx/entity/identifier=$ent
and $ctx/period/startDate=$start
and $ctx/period/endDate=$end) then true() else false()
};
let $id := request:get-parameter('id', '0001173514')
let $startDate := request:get-parameter('startdate', '2013-04-01')
let $endDate := request:get-parameter('enddate', '2013-06-30')
let $fact := request:get-parameter('fact', 'NonoperatingIncomeExpense')
let $q := concat("/*/*:", $fact, "[ local:for-context(., $id, $startDate, $endDate) ]")
return util:eval($q)
Он получает идентификатор компании, дату начала, дату окончания и имя факта и возвращает значение из документа экземпляра.