2013-05-24 3 views
1

Какова практическая разница между функцией data() и функцией string() в Xquery? Кажется, они оба возвращают те же результаты, когда я их использую. Может ли кто-нибудь дать мне простой пример того, как они отличаются?Разница между данными() и строкой()

let $dataset := 
    <data-set cool="rad"> 
    <!--- This is a comment --> 
    <pages cool2="rad2" more="i guess"> 
     <page> 
     <title>Puppy</title> 
     <content>Puppies are great!</content>   
     </page> 
     <page> 
     <title>Dogs</title> 
     <content>Dogs are grown up!</content>   
     </page> 
     <page> 
     <title>Puppy</title> 
     <content>Puppies are great!</content>   
     </page> 
    </pages> 
    </data-set> 

return $dataset/string() 
(: data() returns the same thing as string() :) 
(: return $dataset/data() :) 

ответ

5

string() всегда возвращает строку, в то время как data() возвращает "введенное значение". Большую часть времени это будет xs:string; однако он может также быть xs:untypedAtomic или любым другим атомным типом (как правило, определенным в схеме).

Есть также некоторые неинтуитивные случаи. Например, получение data() на узле документа вернет строковое значение узла, но как xs:untypedAtomic. Как правило, если вы хотите строку, используйте string() не data().

См. Спецификацию для всех деталей: http://www.w3.org/TR/xpath-functions/#func-data.

И этот раздел имеет очень хорошее объяснение разницы между типизированными и строковыми данными http://www.w3.org/TR/xpath-datamodel/#typed-string-relationships.

+2

См. Также эту дискуссию - http://developer.marklogic.com/blog/text-is-a-code-smell#comment-407618423. Вся статья полезна, если вы не уверены в тексте() тоже. – joewiz

Смежные вопросы