jackrabbit食用指南:关于NodeType

作者: cleanup123 | 来源:发表于2019-04-06 06:38 被阅读4次
    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());
    

    相关文章

      网友评论

        本文标题:jackrabbit食用指南:关于NodeType

        本文链接:https://www.haomeiwen.com/subject/vqmqiqtx.html