2017-01-31 19 views
4

Я хочу использовать переменную для представления моего утверждения схемы и использовать ее в своем сообщении о валидации. Например:Есть ли способ передать переменную в schematron?

 <rule context="//Profile/User[@name]"> 
      <assert test="@name = ../business/@owner">User: '----' doesn't exist as a business owner. </assert> 
     </rule> 

«----», независимо от имени пользователя. Есть ли способ использовать переменные в schematron?

ответ

3

Вы можете использовать value-of, чтобы получить значение переменной или XPath:

<rule context="//Profile/User[@name]"> 
     <assert test="@name = ../business/@owner"> 
      User: <value-of select="@name"/> doesn't exist as a business owner. 
     </assert> 
    </rule> 

Если вы хотите, чтобы ввести переменную, используйте let:

<rule context="//Profile/User[@name]"> 
     <let name="userName" value="@name"/> 
     <assert test="@name = ../business/@owner"> 
      User: <value-of select="$userName"/> doesn't exist as a business owner. 
     </assert> 
    </rule> 
+0

Это на самом деле просто печатает адрес памяти : Пользователь: [PSValueOf @ 0x361c294e: select = @ name], не существует как владелец бизнеса. – user3418847

+0

Работает с [Schematron "скелетом" - реализация XSLT] (https://github.com/Schematron/schematron). Кажется, вы используете реализацию Филиппа Хельгера. Не знаю, почему это должно быть иначе. – kjhughes

+2

@kjhughes спасибо за демонстрацию синтаксиса «let» – shrewmouse