Написание правил валидации с использованием словаря XML - PullRequest
2 голосов
/ 05 марта 2011

Может ли кто-нибудь дать мне пример того, как писать правила, используя пользовательский тег в XML, требование состоит в том, что мне нужно написать правила в XML (например: правило 1: в заказе на покупку, если клиент отправляет по многим различным адресам, тогда это мошенническая транзакция).

после того, как правила написаны в xml, выведите их в xslt (что является следующей частью задачи)

спасибо за любую помощь

1 Ответ

2 голосов
/ 06 марта 2011

Schematron

Звучит так, как вам нужно.Файлы Schematron являются XML и могут быть скомпилированы в XSLT.Вы можете использовать его для проверки всех видов пользовательских бизнес-правил и логики.

Schematron

Базовая концепция Schematron отличается от других языков схемы тем, что она не основана на грамматиках.но при нахождении узоров дерева в разобранном документе.Этот подход позволяет представлять много видов структур, которые неудобны и сложны в языках схем на основе грамматики.Если вы знаете XPath или язык выражений XSLT, вы можете сразу начать использовать The Schematron.

И у него есть бесплатные и доступные реализации с открытым исходным кодом.

Schematron тривиально прост в реализации поверх XSLT и в настройке.(Существуют также реализации на Python и Perl)

Schematron позволяет разрабатывать и смешивать два вида схем:

1.) Отчет элементы позволяют диагностировать, с каким языком вы имеете дело.

2.) Утверждение элементы позволяют подтвердить, что документ соответствует определенной схеме.

Schematron основан на простом действии:

  • Сначала найдите узлы контекста в документе (обычно элемент) на основе критериев пути XPath;
  • Затем проверьте, верны ли некоторые другие выражения XPath для каждого из этих узлов.

Пример шаблона Schematron:

<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron"  > 
  <sch:title>Test number of shipping addresses</sch:title>   
  <sch:p>This schema tests whether multiple shipping addresses have been used. </sch:p>
  <sch:ns prefix="po" uri="http://example.org/PurchaseOrder" />     
  <sch:pattern  id="P1"> 
    <sch:rule context="po:order">
    <sch:report test="po:address[2]"
        >Multiple shipping addresses are not allowed</sch:report>
     </sch:rule>       
  </sch:pattern>
</sch:schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...