data()和string()之间的区别

aas*_*onk 2 xquery xquery-3.0

data()函数和Xquery中的string()函数有什么实际区别?当我使用它们时,它们似乎都会返回相同的结果.有人可以给我一个简单的例子,说明它们有何不同?

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() :)
Run Code Online (Sandbox Code Playgroud)

wst*_*wst 6

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.

  • 另请参见此讨论 - http://developer.marklogic.com/blog/text-is-a-code-smell#comment-407618423.如果您对text()也不确定,那么整篇文章很有用. (2认同)