如何在元数据xml章节中添加更多章节

时间:2012-11-29 08:04:58

标签: xquery marklogic

每本书中的chapter-metadata.xml商店isbn文件夹(有100个isbn文件夹,因此有100个chapter-metadata.xml)存储在marklogic数据库服务器和chapter-metadata中。 Xml要么包含一章的数据,要么为空。如果chapter-metadata.xml只包含一个章节信息,那么我想在章节元素下添加更多章节信息(我的章节信息对于所有章节是通用的),该章节元素的属性和值直到书籍isbn文件夹中有多少章节存储(我可以获取并存储在变量$chapter_sequence中,如ch001 ch002 ch003 ch004 ..)或如果chapter-metadata.xml没有任何chaper信息,那么它将创建具有属性和章节编号值的章节元素并添加我的信息,下面我有一些xml结构,如果有一个章节信息,我的信息来自元素keywordset

<?xml version="1.0" encoding="UTF-8" ?> 
<chaptermetadata>
<bookisbn>isbn number</bookisbn>
<booktitle>Copyright</booktitle>
<chapter id="ch001"">
<keywordset>
<keyword role="primary">context</keyword> 
<keyword role="secondary">Copyright</keyword> 
<keyword role="tertiary">subject</keyword>
</keywordset> 
</chapter>
</chaptermetadata>

我想要如下:

<?xml version="1.0" encoding="UTF-8" ?> 
<chaptermetadata>
<bookisbn>isbn number</bookisbn>
<booktitle>Copyright</booktitle>
<chapter id="ch001"">
<keywordset>
<keyword role="primary">context</keyword> 
<keyword role="secondary">Copyright</keyword> 
<keyword role="tertiary">subject</keyword>
</keywordset> 
</chapter>

<chapter id="ch002"">
<keywordset>
<keyword role="primary">context</keyword> 
<keyword role="secondary">Copyright</keyword> 
<keyword role="tertiary">subject</keyword>
</keywordset> 
</chapter>
so on to last chapter which I store in veriable
</chaptermetadata>

感谢,

raj

1 个答案:

答案 0 :(得分:2)

这个问题难以理解,但从http://docs.marklogic.com/xdmp:directory和FLWOR表达开始。假设你把它放到一个函数中。我将手动一些你必须实现的辅助函数,但函数可能看起来像这样:

declare function chaptermetadata($isbn as xs:string)
as element(chaptermetadata) {
  <chaptermetadata>
  {
    <bookisbn>{ $isbn }</bookisbn>
    <booktitle>{ title($isbn) }</booktitle>
    for $chapter in xdmp:directory(isbn-uri($isbn), 'infinity')
    return element { fn:node-name($chapter) } {
      $chapter/@*,
      $chapter/keywordset }
  }
  <chaptermetadata>
};

现在,除非您了解它正在做的所有事情,否则此代码将无济于事,因此您可以根据自己的需要对其进行修改。这是其中一个XQuery用例的变体,因此您可能会发现有助于解决这些问题:http://www.w3.org/TR/xquery-use-cases/