Как добавить больше глав в метаданные главы xml

Хранилище chapter-metadata.xml в каждой папке isbn книги (есть 100 папок isbn, поэтому есть 100 chapter-metadata.xml), которые хранятся на сервере базы данных marklogic и метаданных глав. Xml либо содержит данные одной главы, либо пуст. Если chapter-metadata.xml содержит информацию только об одной главе, то я хочу добавить дополнительную информацию о главе (информация о моей главе является общей для всех глав) в элементе главы с атрибутом и значением этой главы до того, сколько глав хранится в папке книги isbn (которую я могу получить и сохранить в переменной $chapter_sequence, например ch001 ch002 ch003 ch004..) или, если chapter-metadata.xml не имеет никакой информации о главе, тогда он создаст элемент главы с атрибутом и значением номера главы и добавит мою информацию, ниже я разместил некоторую структуру xml, если есть это информация об одной главе, а моя информация взята из набора ключевых слов элемента

<?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>

Благодарность,

радж


person Raj    schedule 29.11.2012    source источник
comment
Пожалуйста, добавьте несколько абзацев и данных XML вместо множества точек, никто не будет тратить время на ответ, если вы не вложите его в свой ответ.   -  person Jens Erat    schedule 29.11.2012


Ответы (1)


Вопрос сложный, но начните с 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/

person mblakele    schedule 29.11.2012