構造化項目名と値のペアを JSON-LD インスタンスに変換する実験
Created
May 22, 2017 11:01
-
-
Save frogcat/fa74c523a870d011e9105da982bdfbe9 to your computer and use it in GitHub Desktop.
構造化項目名と値のペアを JSON-LD インスタンスに変換する実験
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"場所型>表記": "${name}", | |
"場所型>地理座標>緯度": "${latitude}", | |
"場所型>地理座標>経度": "${longitude}" | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"@context": "http://imi.go.jp/ns/core/context.jsonld", | |
"@type": "場所型", | |
"表記": "${name}", | |
"地理座標": { | |
"緯度": "${latitude}", | |
"経度": "${longitude}" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"場所型>表記": "${name}", | |
"場所型>地理座標>緯度": "${latitude}", | |
"場所型>地理座標>経度": "${longitude}", | |
"場所型>地理識別子>": "${geonames}" | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"@context": "http://imi.go.jp/ns/core/context.jsonld", | |
"@type": "場所型", | |
"表記": "${name}", | |
"地理座標": { | |
"緯度": "${latitude}", | |
"経度": "${longitude}" | |
}, | |
"地理識別子": "${geonames}" | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"状況型>表記": "家族構成", | |
"状況型>関与[1]>役割": "夫", | |
"状況型>関与[1]>説明": "世帯主", | |
"状況型>関与[1]>関与者>表記": "${夫}", | |
"状況型>関与[1]>関与者>名称[通称]>表記": "ほげほげ", | |
"状況型>関与[1]>関与者>名称[本名]>表記": "ああああ", | |
"状況型>関与[2]>役割": "妻", | |
"状況型>関与[2]>関与者>表記": "${妻}" | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"@context": "http://imi.go.jp/ns/core/context.jsonld", | |
"@type": "状況型", | |
"表記": "家族構成", | |
"関与": [ | |
{ | |
"役割": "夫", | |
"説明": "世帯主", | |
"関与者": { | |
"表記": "${夫}", | |
"名称": [ | |
{ | |
"表記": "ほげほげ" | |
}, | |
{ | |
"表記": "ああああ" | |
} | |
] | |
} | |
}, | |
{ | |
"役割": "妻", | |
"関与者": { | |
"表記": "${妻}" | |
} | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function mapping2jsonld(mapping) { | |
var json = { | |
"@context": "http://imi.go.jp/ns/core/context.jsonld" | |
}; | |
for (var path in mapping) { | |
var parent = json; | |
path.split(">").forEach(function(token, i, array) { | |
var name = token; | |
var group = ""; | |
if (token.match(/^(.+)\[(.+)\]$/)) { | |
name = RegExp.$1; | |
group = RegExp.$2; | |
} | |
if (i === 0) { | |
json["@type"] = name; | |
} else if (i < array.length - 1) { | |
parent = parent[name] || (parent[name] = {}); | |
parent = parent[group] || (parent[group] = {}); | |
} else { | |
parent[name === "" ? "@id" : name] = mapping[path]; | |
} | |
}); | |
} | |
var dig = function(node, depth) { | |
if (node["@id"] && Object.keys(node).length === 1 && depth > 0) return node["@id"]; | |
for (var property in node) { | |
var object = node[property]; | |
if (typeof object === "object") { | |
var list = []; | |
for (var group in object) list.push(dig(object[group], depth + 1)); | |
node[property] = list.length === 1 ? list[0] : list; | |
} | |
} | |
return node; | |
}; | |
return dig(json, 0); | |
} | |
const fs = require("fs"); | |
var mapping = JSON.parse(fs.readFileSync(process.argv[2], "UTF-8")); | |
var jsonld = mapping2jsonld(mapping); | |
console.log(JSON.stringify(jsonld, null, " ")); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment