2012-11-27 25 views
6

Tôi có một vài tài liệu mà trên đó xdmp:node-replace() trên một số thành phần không hoạt động. Có một số bộ tài liệu khác gần giống với các tài liệu có vấn đề nhưng xdmp:node-replace hoạt động hoàn toàn tốt trên chúng. Đã thử tất cả các khả năng có thể đã đi sai nhưng vô ích. Đọc một số chức năng mà xdmp:node-replace không hoạt động trên 'trong các yếu tố bộ nhớ'.Các yếu tố trong bộ nhớ trong marklogic là gì?

Vì vậy, để xác minh xem vấn đề có 'trong các thành phần bộ nhớ' hay không, tôi muốn biết chính xác nó là gì.

Mọi ánh sáng trên đó sẽ là trợ giúp tuyệt vời

Trả lời

6

Mọi thứ được tạo trong truy vấn là yếu tố trong bộ nhớ. Ví dụ XQuery này mang lại một yếu tố trong bộ nhớ:

<test/> 

Một số chức năng cũng cuộc gọi trở lại các yếu tố trong bộ nhớ: xdmp:unquote là một ví dụ rõ ràng. Bất kỳ nút nào không đến từ cơ sở dữ liệu hiện tại sẽ được coi là nút trong bộ nhớ.

Truy vấn này mang lại một yếu tố cơ sở dữ liệu (nếu nó tồn tại), mà có thể được sửa đổi bằng xdmp:node-replace:

doc('fubar')/test 

Đây là một điển hình trong bộ nhớ cập nhật lỗi:

xdmp:node-replace(<x/>, <y/>) 

Với MarkLogic 6.0 -1.1, mã lỗi là XDMP-UPCONSTNODES.

6

Nếu bạn muốn cập nhật các nút trong bộ nhớ như thể chúng là trong cơ sở dữ liệu bằng cách sử dụng các cuộc gọi chức năng tương tự, có một thư viện tiện ích nào đó:

https://github.com/marklogic/commons/tree/master/memupdate

Thư viện chính cũng tàu với MarkLogic máy chủ dưới mục Services App:

appservices/utils/in-mem-update.xqy

+0

Đối với một phiên bản hơi tối ưu hóa hơn của thư viện đó, xem: https://github.com/ryanjdew/XQuery-XML-Memory-Operations – grtjn

2

Nếu bạn làm việc với in memory elements nhập khẩu các module sau

import module namespace mem = "http://xqdev.com/in-mem-update" at "/MarkLogic/appservices/utils/in-mem-update.xqy";

Thay vì sử dụng xdmp:node-replace bạn có thể sử dụng mem:node-replace(<x/>, <y/>)

Các vấn đề liên quan