По умолчанию предоставление дополнительных свойств является действительным:
Ключевое слово AdditionalProperties используется для управления обработкой лишних вещей, то есть свойства, имена которых не указаны в ключевом слове properties. По умолчанию любые дополнительные свойства разрешены.
Ключевое слово AdditionalProperties может быть логическим или объектом. Если AdditionalProperties является логическим значением и имеет значение false, дополнительные свойства не будут разрешены.
Повторное использование приведенного выше примера, но на этот раз для AdditionalProperties задано значение false.
blockquote>Так что попробуйте добавить это к вашему
query_schema
:query_schema = { "type": "object", "properties" : { "pltfrm_nm": {"type" : "string"}, "srvr_nm": {"type": "string"}, "db_nm": {"type": "string"}, "tbl_nm": {"type": "string"}, "ip_addr_id": {"type": "string"}, "usr_id": {"type": "string"}, "sql_txt": {"type": "string"}, "timestmp": {"type": "string"}, }, "additionalProperties": False }
На самом деле мы провели исследовательский проект по этому вопросу и внедрили верификатор XPath примерно в 2000 году. Это было для XPath 1. Я не знаю каких-либо доступных в настоящее время библиотек, которые вы можете использовать для этого. это.
Если вы хотите пойти и реализовать это самостоятельно, вот несколько советов:
Вы не сможете преобразовать путь по экземпляру документа в путь по схеме, как это делалось выше. Например, / a // b
не преобразуется в / xsd: element [@ name = 'a'] // xsd: element [@ name = 'b']
, потому что элемент b может быть определен на верхнем уровне схемы, а не под b.
Помните, что хотя XML-документ является деревом, схема - это граф. Если вы ищите пути потомков, такие как // a, вам нужно будет решить, когда прекратить поиск, или он может продолжаться вечно (например, представьте в элементе «a», который содержит «b», который содержит «a»)
Некоторые пути будут неразрешимыми или, по крайней мере, очень трудными для определения. Например, // * [начинается с (@name, 'foo')]
Если вы все еще готовы, я предлагаю использовать такую библиотеку, как eclipse XSD или. NET-схема загружает классы для загрузки схемы в память и проверки кода.
Во время проектирования Вы могли использовать инструмент, чтобы генерировать демонстрационный XML-документ и выполнить Ваш XPath против образца. У Шпиона XML Altova есть эта функция, как делает SOAP UI.
SOAP UI на самом деле с открытым исходным кодом (Java) поэтому, возможно, можно посмотреть и видеть, как он генерирует образцы. В ситуации во время выполнения (т.е. если бы схема и XPath являются оба исходными данными к под управлением программе) затем необходимо было бы гарантировать достаточно дополнительных компонентов, и демонстрационные данные были сгенерированы для предотвращения ложных отрицательных сторон и, возможно, должны генерировать несколько файлов в качестве примера.
Я не попытался бы оценить XPath против схемы непосредственно, поскольку различные Оси сделают полное решение очень сложным. Я вполне уверен, который мог быть сделан, но это кажется мне математикой ядра. Я предлагаю генерировать образцы как ярлык.