|
|
@@ -459,20 +459,22 @@ private:
|
|
|
* - The list of enabled vocabulary metaschema (used for is_format_assertion)
|
|
|
*/
|
|
|
auto extract_keywords(ObjectAdapter auto const & vocabularies) const
|
|
|
- -> std::pair<std::unordered_set<std::string>, std::unordered_set<std::string>> {
|
|
|
- std::unordered_set<std::string> keywords;
|
|
|
+ -> std::pair<std::unordered_map<std::string, bool>, std::unordered_set<std::string>> {
|
|
|
+ std::unordered_map<std::string, bool> keywords;
|
|
|
std::unordered_set<std::string> vocab_docs;
|
|
|
- for (auto [vocab, enabled] : vocabularies) {
|
|
|
- if (not enabled.as_boolean()) {
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
+ for (auto [vocab, required] : vocabularies) {
|
|
|
size_t n = vocab.find("/vocab/");
|
|
|
vocab_docs.emplace(vocab.substr(n));
|
|
|
vocab.replace(n, 7, "/meta/");
|
|
|
+
|
|
|
auto vocab_object = external_.try_load(URI(vocab));
|
|
|
- for (auto const & [keyword, _] : vocab_object->as_object()["properties"].as_object()) {
|
|
|
- keywords.insert(keyword);
|
|
|
+ auto it = vocab_object->as_object().find("properties");
|
|
|
+ if (it == vocab_object->as_object().end()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (auto const & [keyword, _] : it->second.as_object()) {
|
|
|
+ keywords.emplace(keyword, required.as_boolean());
|
|
|
}
|
|
|
}
|
|
|
return std::make_pair(keywords, vocab_docs);
|