JSR 170 node types 分为 Mixin types 和 Primary types。
这篇文章主要讨论Primary types,我参考了Jackrabbit Wiki 和 jcr2.0Api 将所有的Primary types节点整理如下图所示。
可以看到所有的节点都是基于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个节点类型一共分为
-
nt:base 基础类型
此类型是抽象节点类型不能直接用来新建新的节点,但是可以用SQL-2语法来查询。 -
nt:unstructured 非结构化节点
可以设置所有类型的属性和子节点。
原文为: The nt:unstructured node type permits all kinds of properties and child nodes to be added to a node
-
nt:hierarchyNode 结构化节点
nt:hierarchyNode也是一个抽象节点,他的具体实现节点有三个:
-
nt:file
可以新增一个jcr:content 的节点,通常使用nt:resources类型的节点。 -
nt:folder
可以新增一个nt:hierarchyNode
类型的节点 -
nt:linkedFile
可以添加一个jcr:content 的属性,通常使用nt:resources类型的节点。
-
-
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());
网友评论