2013-06-25 3 views
0

У меня есть XML-документ, размер которого будет увеличиваться с течением времени, и я хотел бы убедиться, что мой выбор XPath для XSL select будет настолько эффективным, насколько это возможно.Является ли использование логических сравнений быстрее, чем оси в XPath?

Документ содержит следующие типы элементов:

<simple_instance> 
    <name>Class0</name> 
    <type>Business_Capability</type> 
    <own_slot_value> 
    <slot_reference>contained_business_capabilities</slot_reference> 
    <value value_type="simple_instance">Class1</value> 
    <value value_type="simple_instance">Class3</value> 
    <value value_type="simple_instance">Class4</value> 
    <value value_type="simple_instance">Class5</value> 
    </own_slot_value> 
    <own_slot_value> 
    <slot_reference>business_capability_level</slot_reference> 
    <value value_type="string">1</value> 
    </own_slot_value> 
    <own_slot_value> 
    <slot_reference>name</slot_reference> 
    <value value_type="string">Planning</value> 
    </own_slot_value> 
</simple_instance> 

Какой из этих двух селекторов (которые находят такие элементы, как один из приведенных выше) будет более эффективной в долгосрочной перспективе?

/node()/simple_instance[type='Business_Capability']/own_slot_value/slot_reference[text()='business_capability_level']/following-sibling::value[text()='1']

или

/node()/simple_instance[type='Business_Capability' and (own_slot_value/slot_reference='business_capability_level') and (own_slot_value/value='1')]

Я думаю, что, если реализация XML коротких замыканий в and, последний будет быстрее.

Примечание: Я использую возможности XML/XSL для Protege.

ответ

0

Два выражения XPath имеют разные результаты, поэтому запрос, который быстрее, кажется несущественным (первый выбирает элемент значения, второй - элемент simple_instance).

Кроме того, XPath - это спецификация не реализация. Реализации сильно различаются в их стратегиях для оценки сложных путей. Ответ, который верен для одной реализации, может не соответствовать действительности. Измерьте его и посмотрите (и скажите нам ответ).