2013-07-10 1 views
0

У меня есть следующий пример XML:проверка тегов в XML-схеме в зависимости от другого одного

<ip_addresses> 
    <ip_address> 
     <type>local</type> 
     <ip>192.168.1.1</ip> 
    </ip_address> 

    <ip_address> 
     <type>public</type> 
     <ip>82.125.1.1</ip> 
    </ip_address> 
</ip_addresses> 

Как я могу использовать различные регулярные выражения в моей XML-схемы для IP-проверки в зависимости от значения в <type> тега?

Я также пробовал что-то вроде <ip type="local">192.168.1.1</ip>, но я не мог получить правильную схему xml.

ТНХ для помощи Мартена

+0

Почему регулярное выражение, а не xpath? –

+0

Я имею в виду регулярное выражение для проверки ip. Я не могу проверить ip по xpath или? Что-то вроде этого значения = "(192) \. (168) \. (112) \. (25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?) –

+0

Хорошо, теперь я понимаю, что вы имеете в виду. –

ответ

0

В XSD 1.0 вы не можете сделать вид одного элемента в зависимости от значения другого.

В XSD 1.1 вы можете сделать это с помощью утверждений. Например (на уровне ip_address) вы можете написать

<xs:assert test="(@type='local' and @ip='192.168.1.1') or @type='public'"/> 
+0

Но @ ip = 'XYZ' не может быть регулярным выражением, как в моем комментарии выше, или? Насколько я понимаю ваш ответ, я могу утверждать только против одного ip за xs: assert или? –

+0

Нет, вы можете использовать любое выражение XPath, например, вы можете использовать match() с регулярным выражением. Я не уверен, почему вы предложили регулярное выражение, в запросе OP это не похоже, но утверждение проблемы очень расплывчато. –