如何使用 java 在 ckan 中创建任何文件的元数据(JSON)?
How to create metadata(JSON) of any file in ckan using java?
我在本地系统中有一个文件,我想创建该文件的元数据,其中包括:
{Filename, create date, update date, file format etc etc}
作为 JSON 格式的键值对。接下来,我想在 CKAN 中上传它,(CKAN API 调用) 这样我最终可以使用 CKAN url 看到文件。我已经有了带有 CKAN 密钥的 CKAN 主机 url。
有人可以帮我在 Java 中编写这个脚本吗?我是 CKAN 的新手,这是第一次尝试这样做,但我做不到。如果有人可以共享示例代码以供参考,那将会很有帮助。我认为它应该只是一个 API 调用。
1.Below 是相同工作的 python 脚本。但我想在java完成,请帮忙..
metadata ={}
azure_urls=[]
for blob in urls:
print(blob)
for url in urls[blob]:
print(url)
r = requests.get(url,stream=True)
file_name = url.split(“/”)[-1]
with open(file_name, ‘wb’) as data:
for chunk in r.iter_content(chunk_size = 1024*1024):
if chunk:
data.write(chunk)
block_blob_service.create_blob_from_path(path.join(container,blob),
data.name,
file_name ,
content_settings=ContentSettings(content_type=mimetypes.guess_type(‘./%s’ %url.split(“/”)[-1])[0]))
print(‘uploading file to ‘+’‘+blob+' ‘+’in a ‘+ container)
os.remove(data.name)
download_url = block_blob_service.make_blob_url(path.join(container, blob),data.name)
azure_urls.append(download_url)
metadata[blob]= azure_urls
metadata[‘Title’] = ‘Dbpedia’+‘-’+blob
metadata[‘Publisher’] = ‘Name’
metadata[‘Created’] = datetime.now().strftime(“%Y-%m-%d %H:%M:%S”)
metadata[‘version’] = “2016-10"
metadata[ “Container”] = container
metadata[‘SourceType’] = [url.split(“.”)[-1] for url in azure_urls]
print(metadata)
下面是ckanAPI调用语句:
ckan = ckanapi.RemoteCKAN(‘http://hostname’,‘key’)
3.getting在url中输出如下:
{‘ontology’: [‘link1', ‘link2’], ‘Title’: ‘Dbpedia-ontology’, ‘Publisher’: ‘SiddarthaP’, ‘Created’: ‘2017-08-03 00:55:22’, ‘version’: ‘2016-10’, ‘Container’: ‘dbpedia’, ‘SourceType’: [‘owl’, ‘nt’]}
我假设你正在尝试做的是处理给定格式的一些信息并将其上传到 CKAN。我不确定您在 Python
中提供的代码是否符合您的预期(即 URL 在所有 blob 之间共享,而不是为每个 blob 累积)并且它也不会上传任何内容。
也就是说,使用 JAKAN API v0.4 你可以编写类似的代码:
- 创建 CKAN 安全客户端
- 处理您从其他服务收到的信息
- 创建元数据的 JSON 表示
- 上传到 CKAN
代码:
private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void processUrls(String[] blobs, Map<String, String[]> urls) {
CkanClient cc = new CheckedCkanClient("HOSTNAME", "key");
// Process each blob
for (String dsName : blobs) {
System.out.println("DATASET: " + dsName);
// Process all the available URLS of the same blob
List<String> urls = new ArrayList<>();
String publisherName;
String container;
for (String url : urls.get(blob)) {
System.out.println("URL: " + url);
String[] urlFields = url.split("/");
String fileName = urlFields[urlFields.length - 1];
System.out.println(" - Resource " + fileName + " with URL " + url);
urls.add(url);
}
// Construct the JSON metadata
JSONObject metaData = createMetaData(dsName, urls, publisherName, container);
System.out.println("METADATA: ");
System.out.println(metaData.toJSONString());
// Upload to CKAN
ObjectMapper objectMapper = new ObjectMapper();
CkanDataset cd = objectMapper.readValue(metaData, CkanDataset.class);
CkanDataset createdDataset = cc.createDataset(cd);
}
}
private JSONObject createMetaData(String dsName, List<String> urls, String publisherName, String container) {
JSONArray metaDataUrls = new JSONArray();
JSONArray urlTypes = new JSONArray();
for (String url : urls) {
metaDataUrls.put(url);
String[] urlFields = url.split(".");
urlTypes.put(urlFields[urlFields.length - 1]);
}
JSONObject metaData = new JSONObject();
metaData.put(dsName, metaDataUrls);
metaData.put("Title", "Dbpedia-" + dsName);
metaData.put("Publisher", publisherName);
metaData.put("Created", FORMAT.format(new Date()));
metaData.put("version", "2016-10");
metaData.put("Container", container);
metaData.put("SourceType", urlTypes);
return metaData;
}
我在本地系统中有一个文件,我想创建该文件的元数据,其中包括:
{Filename, create date, update date, file format etc etc}
作为 JSON 格式的键值对。接下来,我想在 CKAN 中上传它,(CKAN API 调用) 这样我最终可以使用 CKAN url 看到文件。我已经有了带有 CKAN 密钥的 CKAN 主机 url。
有人可以帮我在 Java 中编写这个脚本吗?我是 CKAN 的新手,这是第一次尝试这样做,但我做不到。如果有人可以共享示例代码以供参考,那将会很有帮助。我认为它应该只是一个 API 调用。
1.Below 是相同工作的 python 脚本。但我想在java完成,请帮忙..
metadata ={}
azure_urls=[]
for blob in urls:
print(blob)
for url in urls[blob]:
print(url)
r = requests.get(url,stream=True)
file_name = url.split(“/”)[-1]
with open(file_name, ‘wb’) as data:
for chunk in r.iter_content(chunk_size = 1024*1024):
if chunk:
data.write(chunk)
block_blob_service.create_blob_from_path(path.join(container,blob),
data.name,
file_name ,
content_settings=ContentSettings(content_type=mimetypes.guess_type(‘./%s’ %url.split(“/”)[-1])[0]))
print(‘uploading file to ‘+’‘+blob+' ‘+’in a ‘+ container)
os.remove(data.name)
download_url = block_blob_service.make_blob_url(path.join(container, blob),data.name)
azure_urls.append(download_url)
metadata[blob]= azure_urls
metadata[‘Title’] = ‘Dbpedia’+‘-’+blob
metadata[‘Publisher’] = ‘Name’
metadata[‘Created’] = datetime.now().strftime(“%Y-%m-%d %H:%M:%S”)
metadata[‘version’] = “2016-10"
metadata[ “Container”] = container
metadata[‘SourceType’] = [url.split(“.”)[-1] for url in azure_urls]
print(metadata)
下面是ckanAPI调用语句:
ckan = ckanapi.RemoteCKAN(‘http://hostname’,‘key’)
3.getting在url中输出如下:
{‘ontology’: [‘link1', ‘link2’], ‘Title’: ‘Dbpedia-ontology’, ‘Publisher’: ‘SiddarthaP’, ‘Created’: ‘2017-08-03 00:55:22’, ‘version’: ‘2016-10’, ‘Container’: ‘dbpedia’, ‘SourceType’: [‘owl’, ‘nt’]}
我假设你正在尝试做的是处理给定格式的一些信息并将其上传到 CKAN。我不确定您在 Python
中提供的代码是否符合您的预期(即 URL 在所有 blob 之间共享,而不是为每个 blob 累积)并且它也不会上传任何内容。
也就是说,使用 JAKAN API v0.4 你可以编写类似的代码:
- 创建 CKAN 安全客户端
- 处理您从其他服务收到的信息
- 创建元数据的 JSON 表示
- 上传到 CKAN
代码:
private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void processUrls(String[] blobs, Map<String, String[]> urls) {
CkanClient cc = new CheckedCkanClient("HOSTNAME", "key");
// Process each blob
for (String dsName : blobs) {
System.out.println("DATASET: " + dsName);
// Process all the available URLS of the same blob
List<String> urls = new ArrayList<>();
String publisherName;
String container;
for (String url : urls.get(blob)) {
System.out.println("URL: " + url);
String[] urlFields = url.split("/");
String fileName = urlFields[urlFields.length - 1];
System.out.println(" - Resource " + fileName + " with URL " + url);
urls.add(url);
}
// Construct the JSON metadata
JSONObject metaData = createMetaData(dsName, urls, publisherName, container);
System.out.println("METADATA: ");
System.out.println(metaData.toJSONString());
// Upload to CKAN
ObjectMapper objectMapper = new ObjectMapper();
CkanDataset cd = objectMapper.readValue(metaData, CkanDataset.class);
CkanDataset createdDataset = cc.createDataset(cd);
}
}
private JSONObject createMetaData(String dsName, List<String> urls, String publisherName, String container) {
JSONArray metaDataUrls = new JSONArray();
JSONArray urlTypes = new JSONArray();
for (String url : urls) {
metaDataUrls.put(url);
String[] urlFields = url.split(".");
urlTypes.put(urlFields[urlFields.length - 1]);
}
JSONObject metaData = new JSONObject();
metaData.put(dsName, metaDataUrls);
metaData.put("Title", "Dbpedia-" + dsName);
metaData.put("Publisher", publisherName);
metaData.put("Created", FORMAT.format(new Date()));
metaData.put("version", "2016-10");
metaData.put("Container", container);
metaData.put("SourceType", urlTypes);
return metaData;
}