IT@程序员猿媛学习jackrabbit内容仓库Java 杂谈

jackrabbit食用指南:关于NodeType

2019-04-06  本文已影响4人  cleanup123
rabbit.jpg

JSR 170 node types 分为 Mixin types 和 Primary types。

这篇文章主要讨论Primary types,我参考了Jackrabbit Wikijcr2.0Api 将所有的Primary types节点整理如下图所示。

JCR Primary types.png

可以看到所有的节点都是基于nt:base产生的,并且nt:base是一个abstract节点,如果你直接将nt:base节点当作节点类型创建新节点会得到一个抽象节点的异常提示。

Node ntbase = rootNode.addNode("ntbase", NodeType.NT_BASE);

javax.jcr.nodetype.ConstraintViolationException: Unable to add a node with an abstract node type: nt:base

jackrabbit wiki 上只针对
nt:base,
nt:unstructured,
nt:hierarchyNode,
nt:file,
nt:folder,
nt:resource
这几个NodeType做了说明,其他的节点没有任何提示。所以本文只对这写NodeType做使用说明,其他的节点cleanup123会在尝试之后补充更新。

上述6个节点类型一共分为

  1. nt:base 基础类型
    此类型是抽象节点类型不能直接用来新建新的节点,但是可以用SQL-2语法来查询。
  2. nt:unstructured 非结构化节点
    可以设置所有类型的属性和子节点。

原文为: The nt:unstructured node type permits all kinds of properties and child nodes to be added to a node

  1. nt:hierarchyNode 结构化节点

    nt:hierarchyNode也是一个抽象节点,他的具体实现节点有三个:

    1. nt:file
      可以新增一个jcr:content 的节点,通常使用nt:resources类型的节点。

    2. nt:folder
      可以新增一个nt:hierarchyNode类型的节点

    3. nt:linkedFile
      可以添加一个jcr:content 的属性,通常使用nt:resources类型的节点。

  2. nt:resource
    可以设置Property.JCR_ENCODING,Property.JCR_MIMETYPE,Property.JCR_DATA,Property.JCR_LAST_MODIFIED这四个属性。


以下是具体使用这写节点的代码:

        //在基础节点后增加非结构化
        Node unstructured = rootNode.addNode("unstructured", NodeType.NT_UNSTRUCTURED);
        //非结构化节点可以自定义自己的属性
        unstructured.setProperty("p1","abc");
        unstructured.setProperty("p2","1234");

        //在基础节点下新增nt:hierarchyNode类型的nt:folder
        Node picfolder = rootNode.addNode("picfolder", NodeType.NT_FOLDER);
        //在folder下面建立nt:file节点
        Node mypic1 = picfolder.addNode("mypic1", NodeType.NT_FILE);
        //在mypic1文件下可建立Node.JCR_CONTENT的节点可以是任何类型,但是通常会选择nt:resource节点
        Node sky = mypic1.addNode(Node.JCR_CONTENT, NodeType.NT_RESOURCE);
        sky.setProperty(Property.JCR_ENCODING,"utf-8");
        sky.setProperty(Property.JCR_MIMETYPE,"application/json");
        sky.setProperty(Property.JCR_DATA, new BinaryImpl("{'id':001,'msg':'sky is blue!'}".getBytes()));
        sky.setProperty(Property.JCR_LAST_MODIFIED,Calendar.getInstance().getTimeInMillis());
上一篇 下一篇

猜你喜欢

热点阅读