最初,我做这件事的方式不对:
- 我使用MySQL来复制表
这很糟糕,因为ARC2对它的一个表列使用了一个依赖于平台的哈希函数。
所以,我认为解决方案很简单:
// To export
$store->createBackup('backup_file.spog');
// To import
$store->query('LOAD <file://FULL_PATH_TO_FILE/backup_file.spog>');
我想发布这个问题,以防有人提出更多建议。我还是RDF和ARC2的新手。
关于ARC2问题的更多信息:
- 为了在MySQL数据库中查找主题URI,ARC2使用http://php.net/crc32散列函数。生成的整数不是32位。尽管crc32()使用"一次32位长度的输入字符串"准备校验和,但生成的整数值取决于平台,可以在PHP_INT_SIZE和PHP_INT_MAX常量中看到
这个问题没有答案(除了我在问题中提出的答案),所以我只回答我自己的问题。唯一的选择一定是我迄今为止找到的。。。显然,在ARC2中没有其他方法可以进行完全导入/导出转储,除了。。。
// To export
$store->createBackup('backup_file.spog');
// To import
$store->query('LOAD <file://FULL_PATH_TO_FILE/backup_file.spog>');
$ser = ARC2::getRDFXMLSerializer();
$all = $store->query("SELECT ?s ?p ?o WHERE { ?s ?p ?o }");
$rdfxml2 = $ser->getSerializedTriples($all['result']['rows']);
file_put_contents('storename.rdf', $rdfxml2);