4

私はこのようなjsonオブジェクトを持っています:

[{
"id": 1,
"text": "Item 1",
"iconCls": "icon-ok",
"target": {
    "jQuery180016273543753015074": 16
},
"checked": false,
"state": "open",
"children": [{
    "id": 2,
    "text": "Item 1_1",
    "target": {
        "jQuery180016273543753015074": 15
    },
    "checked": false,
    "state": "open",
    "children": [{
        "id": 3,
        "text": "Item 1_1_1",
        "target": {
            "jQuery180016273543753015074": 14
        },
        "checked": false,
        "state": "open",
        "children": [{
            "id": 7,
            "text": "Item 1_1_1_1",
            "target": {
                "jQuery180016273543753015074": 13
            },
            "checked": false
        },
        {
            "id": 6,
            "text": "Item 1_1_1_2",
            "target": {
                "jQuery180016273543753015074": 12
            },
            "checked": false
        }]
    }]
},
{
    "id": 8,
    "text": "Item 1_1_2",
    "target": {
        "jQuery180016273543753015074": 11
    },
    "checked": false,
    "state": "open",
    "children": [{
        "id": 4,
        "text": "Item 1_1_2_1",
        "target": {
            "jQuery180016273543753015074": 10
        },
        "checked": false
    },
    {
        "id": 5,
        "text": "Item 1_1_2_2",
        "target": {
            "jQuery180016273543753015074": 9
        },
        "checked": false
    }]
},
{
    "id": 9,
    "text": "Item 1_1_3",
    "target": {
        "jQuery180016273543753015074": 17
    },
    "checked": false
}]
 }]

そして、Javaを使用して、子の階層を「サブクラス」プロパティとして保持するRDFオントロジーでシリアル化する必要があります。誰かがJSONを解析するための効率的なアルゴリズムを提案できますか?オントロジーの処理にはラボの内部JavaAPIを使用しているため、この場合はコードではなくアルゴリズムの方が便利です。

4

1 に答える 1

4

ここにリストされているライブラリのいずれかを使用してJSONドキュメントを解析し、Jenaを使用してRDFトリプルを作成できます。

おそらく、JSONドキュメントを再帰的にトラバースし、ノードごとに、ノードが保持するJSONプロパティと同じ数の属性を持つRDFノードを作成する必要があります。子の関係を表すために使用できるrdfs:subClassOfので、ノード2はrdfs:subClassOfノード1のになります。

これは、ノード1とノード2がRDF/Turtleでシリアル化される方法の例です。

   @prefix : <http://other.example.org/ns#> .

   :node_1 rdf:type :Node;
    :text "Item 1";
    :iconCls 16;
    :target [
        :jQueryID "180016273543753015074";
        :number 11;
    ];
    :checked false;
    :state "open" .

  :node_2 rdf:type :Node;
    :text "Item 1";
    :iconCls 16;
    :target [
        :jQueryID "180016273543753015074";
        :number 11;
    ];
    :checked false;
    :state "open";
    rdfs:subClassOf :node_1 .

これがどのように構築されるかを理解するには、Turtleの仕様書を見る必要があるかもしれませんが、とにかく直感的です。RDFトリプルをシリアル化する方法はいくつかあることを覚えておいてください。RDF/Turtleが最も読みやすいです。ご覧のとおり、ノード間の子の関係はノード2に記録されます。

于 2013-02-19T19:19:17.483 に答える