2016-04-04 7 views
0

Я пытаюсь сделать запрос по XML (XHTML5) с двумя разными пространствами имен, один для тегов и один для атрибутов.XQuery XML-файлы с различным пространством имен в атрибутах (epub: type)

Это пример:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:epub="http://www.idpf.org/2007/ops"> 

<head> 
    <link href="primo.css" rel="stylesheet" type="text/css" /> 
    <title>Incipit</title> 


</head> 
<body> 

    <p id="notauno" epub:type="footnote">Il nome della rosa è una cosa.</p> 
</body> 
</html> 

Итак, у меня есть "типа" атрибут из EPUB пространства имен. Я не могу понять правильный синтаксис XQuery для чтения, например, значения epub: type in p tag («footnote»). Я пробовал другой код, например:

xquery version "1.0"; 

declare namespace epub="http://www.idpf.org/2007/opf"; 
declare namespace h="http://www.w3.org/1999/xhtml"; 

let $sorgente:=fn:doc("file.xhtml") 

for $nota in $sorgente//h:p 
return data ($nota/@epub:type) 

Но есть ошибка, которую я не вижу. Если кто-то может мне помочь, спасибо заранее.

+0

"есть ошибка" - _which_ ошибка? Какой результат вы получаете, каков ожидаемый результат ввода, который вы предоставили? –

+0

Мой ожидаемый результат - «сноска». Я получил «Ваш запрос возвратил пустую последовательность». –

+0

, если вы используете MarkLogic? – Daniele

ответ

1

Похоже, опечатка для меня. XML имеет epub префикса отображается на следующий URI:

xmlns:epub="http://www.idpf.org/2007/ops" 

в то время как в XQuery, тот же префикс отображаются:

epub="http://www.idpf.org/2007/opf"; 

Обратите внимание на разницу между ops и opf

+1

Вы правы. Facepalm. Это была опечатка. Большое спасибо. –

1

Вашей декларации для пространства имен epub есть опечатка. должно быть:

declare namespace epub="http://www.idpf.org/2007/ops"; 

И тогда он будет работать ;-)

+0

Вы тоже правы. Большое спасибо. –