Необходимы дополнительные данные в управляемой версии документов - PullRequest
0 голосов
/ 28 января 2019

Мне нужно управлять версиями документов.Для этого я использую DataManagement от MarkLogic (dls:document-insert-and-manage и dls:document-checkout-update-checkin).

Я пытаюсь включить дополнительные данные для каждой версии этого документа (например, majorversion, minorversion, ...).Насколько я вижу, я не могу изменить свойства dls: Version.Использование dls:document-set-property($uri,<dls:majorversion>1</dls:majorversion>) приводит к

DLS-SPECIALPROP: (err: FOER0000) Невозможно обновить свойства в пространстве имен dls

Как добавить информацию для каждой версиидокументы, чтобы я мог запросить их (например, дать мне последнюю версию документа, где majorversion равен 1)?

Редактировать: я пытался установить свойства, используя dls:document-set-property($uri, $prop) при обновлении.

dls:document-checkout('/textdoc/4.xml', fn:true(),"checking out 2",3)
;
dls:document-set-property('/textdoc/4.xml', <mainversion>3</mainversion>),
dls:document-update('/textdoc/4.xml', $doc,   "update",   fn:true() )
;
dls:document-checkin('/textdoc/4.xml',   fn:true())

К сожалению, я не смог получить историю моей собственности.Использование

 let $uri := fn:concat('/textdoc/4.xml')   
 let $results := for $versionuri in dls:document-version-uris($uri)
 return xdmp:document-properties($versionuri)

не дало мне ни одного из моих свойств.

использование xdmp:document-properties($uri) (на основе uri документов) приводит только к последнему содержанию (<mainversion>3</mainversion>) моих свойств,Все прежнее содержимое для свойства mainversion потеряно.

Я не нашел никакого метода, извлекающего свойства в dls.Есть ли история свойств?

Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

MarkLogic 9 также поддерживает метаданные для документов.Вы можете хранить дополнительную информацию о версии: https://docs.marklogic.com/xdmp.documentPutMetadata.

0 голосов
/ 28 января 2019

Библиотека DLS не предназначена для работы с основными и вспомогательными версиями, и модифицировать ее будет нелегко.Лучшее, о чем я могу подумать сейчас, - это управлять основными версиями как частью документа, а DLS позаботиться о второстепенных версиях.Затем вы можете использовать запросы к каталогам, чтобы ограничиться основной версией документа.

Вы все еще можете попробовать свойства документа, но избегайте использования префикса dls:.Используйте собственный префикс / пространство имен или вообще не используйте префикс / пространство имен.

Что-то подобное может приблизить вас:

xquery version "1.0-ml";

import module namespace dls = "http://marklogic.com/xdmp/dls" 
  at "/MarkLogic/dls.xqy";

dls:retention-rule-insert(
  dls:retention-rule(
    "retain-everything",
    "Retain all versions of all documents",
    (),
    (),
    "Locate all of the documents",
    cts:true-query()
  )
)

;

import module namespace dls = "http://marklogic.com/xdmp/dls" 
  at "/MarkLogic/dls.xqy";

let $contents :=   
<BOOK>
  <TITLE>Baz Goes to the Disco</TITLE>
  <CHAPTER1>
     <TITLE>Baz Wakes Up to James Brown and Feels Funky</TITLE>
  </CHAPTER1>
</BOOK> 

return (
  dls:document-insert-and-manage(
    "/foo/bar/baz.xml",
    fn:true(),
    $contents
  )
)

;

import module namespace dls = "http://marklogic.com/xdmp/dls" 
  at "/MarkLogic/dls.xqy";

dls:document-set-property(
  dls:document-version-uri('/foo/bar/baz.xml', 1), 
  <mainversion>3</mainversion>
)

;

import module namespace dls = "http://marklogic.com/xdmp/dls" 
  at "/MarkLogic/dls.xqy";

let $bazbook :=  
<BOOK>
  <TITLE>Baz Goes to the Disco</TITLE>
  <CHAPTER1>
    <TITLE>Baz Wakes Up</TITLE>
    <PARA>
      Baz woke up this afternoon to the sound of James Brown.  Soon
      Baz was feeling a little funky, so he put on his cleanest
      propeller hat and headed out in search of a Disco.
    </PARA>
  </CHAPTER1>
</BOOK> 

return
  dls:document-checkout-update-checkin(
    "/foo/bar/baz.xml",
    $bazbook,
    "Changed the title from Baz Feelin' Funky",
    fn:true()
  )

;

import module namespace dls = "http://marklogic.com/xdmp/dls" 
  at "/MarkLogic/dls.xqy";

dls:document-set-property(
  dls:document-version-uri('/foo/bar/baz.xml', 2), 
  <mainversion>4</mainversion>
)

HTH!

...