Я могу проверить выражение XPath против XML-схемы?

Документация гласит:

По умолчанию предоставление дополнительных свойств является действительным:

Ключевое слово 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
}

7
задан Gavin 21 March 2009 в 07:31
поделиться

2 ответа

На самом деле мы провели исследовательский проект по этому вопросу и внедрили верификатор 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-схема загружает классы для загрузки схемы в память и проверки кода.

6
ответ дан 7 December 2019 в 03:21
поделиться

Во время проектирования Вы могли использовать инструмент, чтобы генерировать демонстрационный XML-документ и выполнить Ваш XPath против образца. У Шпиона XML Altova есть эта функция, как делает SOAP UI.

SOAP UI на самом деле с открытым исходным кодом (Java) поэтому, возможно, можно посмотреть и видеть, как он генерирует образцы. В ситуации во время выполнения (т.е. если бы схема и XPath являются оба исходными данными к под управлением программе) затем необходимо было бы гарантировать достаточно дополнительных компонентов, и демонстрационные данные были сгенерированы для предотвращения ложных отрицательных сторон и, возможно, должны генерировать несколько файлов в качестве примера.

Я не попытался бы оценить XPath против схемы непосредственно, поскольку различные Оси сделают полное решение очень сложным. Я вполне уверен, который мог быть сделан, но это кажется мне математикой ядра. Я предлагаю генерировать образцы как ярлык.

3
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: