- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到虽然 rdf-insert
不允许您指定文档,但只能指定图形。
最佳答案
首先,这里的关键是要认识到在 MarkLogic 中有两种存储和管理三元组的方法。
托管三元组 - 这是您希望将 MarkLogic 用作“仅三元组存储”的地方。您可以使用 mlcp(命令行批量加载程序)或 sem:rdf-load() 或 sem:rdf-insert() 加载三元组。在这种情况下,您不想知道或关心三元组存储在哪些文档中 - 您只想加载三元组以便稍后使用 SPARQL 查询它们。这就是为什么 sem:rdf-insert() 没有“将其插入此文档”参数。
嵌入的三元组 - 三元组嵌入在 XML(或 JSON)文档中。在这种情况下,三元组在概念上是文档的一部分;因此,如果您想将三元组插入文档(在文档中嵌入三元组),您应该查看文档 操作 API,而不是三元组 操作 API。 p>
一旦你有了那个心智模型,你可以选择使用 sem:rdf-insert() 如果你的三元组本质上是“自由 float 的”——也就是说,它在哪个文档中并不重要。或者你可以选择使用像 xdmp:node-insert-child() 这样的东西,如果你真的想把那个三元组放在现有文档的某个位置。(在 MarkLogic 8 中,您还可以使用 SPARQL 更新来插入托管/自由 float 三元组。
也就是说,我想看看我是否可以用一种更简单、更直观的方式来执行 node-insert-child - 即没有上面的“技巧”。
首先,最好使用上面的 sem:iri() 和 sem:triple() 构建三元组 - 尽管您可以直接在 XML 中构建三元组。使用 sem: 构造函数更健壮。
其次,sem:triple() 返回类型为 sem:triple 的对象,而不是 XML 节点。所以你不能直接将它传递给 xdmp:node-insert-child() 。但是是一个辅助函数,用于将 sem:triple 转换为 XML 节点 - sem:rdf-serialize(),带有“triplexml”选项。
所以你可以这样做:
xdmp:document-insert( "/test/test.xml", <doc><title>test</title></doc>)
然后:
import module namespace sem = "http://marklogic.com/semantics"
at "/MarkLogic/semantics.xqy";
xdmp:node-insert-child(
fn:doc('/test/test.xml')/doc,
sem:rdf-serialize(
sem:triple(sem:iri("Firefly"), "is-a", "TV show"),
"triplexml"
)
)
...你会得到:
fn:doc('/test/test.xml')
=>
<doc>
<title>test</title>
<sem:triples xmlns:sem="http://marklogic.com/semantics">
<sem:triple>
<sem:subject>Firefly</sem:subject>
<sem:predicate datatype="http://www.w3.org/2001/XMLSchema#string">is-a</sem:predicate>
<sem:object datatype="http://www.w3.org/2001/XMLSchema#string">TV show</sem:object>
</sem:triple>
</sem:triples>
</doc>
关于marklogic - 如何将三元组插入到特定的 XML 文档中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27418817/
我是一名优秀的程序员,十分优秀!