SLAX 명령문 개요
이 섹션에서는 일반적으로 사용되는 몇 가지 SLAX 명령문과 간단한 예제 및 XSLT 등가물을 설명합니다.
for-each Statement
SLAX for-each
명령문은 요소와 <xsl:for-each>
같이 작동합니다. 문은 키워드, 괄호 구분 표현식 및 곱슬곱슬하게 구분된 블록으로 구성 for-each
됩니다. 이 문은 for-each
프로세서가 일련의 노드를 함께 수집하고 하나씩 처리하도록 지시합니다. 노드는 지정된 XPath 표현식으로 선택됩니다. 각 노드는 코드 블록에 있는 for-each
지침에 따라 처리됩니다.
for-each (xpath-expression) { ... }
명령 내부의 for-each
코드는 XPath 표현식과 일치하는 각 노드에 대해 반복적으로 평가됩니다. 즉, 현재 컨텍스트는 절에서 선택한 for-each
각 노드로 이동하고 처리는 현재 컨텍스트와 관련됩니다.
다음 예에서 변수는 inventory
인벤토리 계층을 저장합니다. 이 명령문은 for-each
노드의 하위 chassis-module
노드인 각 chassis-sub-module
노드를 반복적으로 처리합니다chassis
. 지정된 부품 번호와 동일한 값을 message
가진 값을 포함하는 part-number
각 chassis-sub-module
요소에 대해 섀시 모듈의 이름과 섀시 서브 모듈의 설명이 포함된 요소가 생성됩니다.
for-each ($inventory/chassis/chassis-module/ chassis-sub-module[part-number == '750-000610']) { <message> "Down rev PIC in " _ ../name _ ", " _ name _ ": " _ description; }
XSLT는 다음과 같습니다.
<xsl:for-each select="$inventory/chassis/chassis-module/ chassis-sub-module[part-number = '750-000610']"> <message> <xsl:value-of select="concat('Down rev PIC in ', ../name, ', ', name, ': ', description)"/> </message> </xsl:for-each>
if, else if, 기타 명령문
SLAX는 if
, else if
및 else
명령문을 지원합니다. 명령문은 if
지정된 XPath 표현식이 true로 평가될 경우 명령을 처리하도록 하는 조건부 구조입니다. 구조에는 if
하나 이상의 관련 else if
절이 있을 수 있으며 각 절은 XPath 표현식을 테스트합니다. 명령문의 표현식이 if
false로 평가되면 프로세서가 각 else if
표현식을 검사합니다. 명령문이 true로 평가되면 스크립트는 관련 블록에서 지침을 실행하고 후속 else if
및 else
모든 명령문을 무시합니다. 옵션 else
절은 연결된 if
모든 표현식과 else-if
표현식이 false로 평가될 때 실행되는 기본 코드입니다. 모든 진술과 else if
진술이 if
거짓으로 평가되고 명령문이 else
제시되지 않으면 아무런 조치도 취하지 않습니다.
괄호 안에 나타나는 표현식은 확장 XPath 표현식으로, XPath의 Single Equal Sign()을 대신하여 이중 균등 기호(==
=
)를 지원합니다.
if (expression) { /* If block Statement */ } else if (expression) { /* else if block statement */ } else { /* else block statement */ }
스크립트를 처리하는 if
동안 관련 else if
명령문이나 else
명령문이 없는 명령문이 요소로 <xsl:if>
변환됩니다. else if
절 또는 else
절이 있는 경우 명령 if
문과 연결된 else
else if
블록이 요소로 <xsl:choose>
변환됩니다.
if (starts-with(name, "fe-")) { if (mtu < 1500) { /* Select Fast Ethernet interfaces with low MTUs */ } } else { if (mtu > 8096) { /* Select non-Fast Ethernet interfaces with high MTUs */ } }
XSLT는 다음과 같습니다.
<xsl:choose> <xsl:when test="starts-with(name, 'fe-')"> <xsl:if test="mtu < 1500"> <!-- Select Fast Ethernet interfaces with low MTUs --> </xsl:if> </xsl:when> <xsl:otherwise> <xsl:if test="mtu > 8096"> <!-- Select non-Fast Ethernet interfaces with high MTUs --> </xsl:if> </xsl:otherwise> </xsl:choose>
일치 선언문
명령문을 사용한 match
기본 일치 템플릿을 지정한 다음, 템플릿 허용 시기를 지정하는 표현식과 중괄호 세트에 동봉된 명령문 블록을 지정합니다.
match configuration { <xnm:error> { <message> "..."; } }
XSLT는 다음과 같습니다.
<xsl:template match="configuration"> <xnm:error> <message> ...</message> </xnm:error> </xsl:template>
일치 템플릿 구성에 대한 자세한 내용은 SLAX 템플릿 개요를 참조하십시오.
ns 명령문
SLAX ns
명령문을 사용하여 네임스페이스 정의를 지정합니다. 이는 키워드, 접두사 문자열, 같음 기호, 네임스페이스 URI(Uniform Resource Identifier)로 구성됩니다ns
. 기본 네임스페이스를 정의하려면 키워드와 네임스페이 ns
스 URI만 사용합니다.
ns junos = "https://www.juniper.net/junos/";
ns
스타일 시트의 version
시작 부분이나 블록의 시작 부분에 있는 명령문 후에 명령문이 나타날 수 있습니다.
ns a = "http://example.com/1"; ns "http://example.com/global"; ns b = "http://example.com/2"; match / { ns c = "http://example.com/3"; <top> { ns a = "http://example.com/4"; apply-templates commit-script-input/configuration; } }
스타일 시트의 시작 부분에 나타나면 명령 ns
문에 키워드 또는 extension
키워드를 포함할 exclude
수 있습니다. 키워드는 구문 분석기에서 이름공간 접두사 또는 extension-element-prefixes
속성에 exclude-result-prefixes
추가하도록 지시합니다.
ns exclude foo = "http://example.com/foo"; ns extension jcs = "http://xml.juniper.net/jcs";
XSLT는 다음과 같습니다.
<xsl:stylesheet xmlns:foo="http://example.com/foo" xmlns:jcs="http://xml.juniper.net/jcs" exclude-result-prefixes="foo" extension-element-prefixes="jcs"> <!-- ... --> </xsl:stylesheet>
버전 명령문
모든 SLAX 스타일 시트는 SLAX 언어의 버전 번호를 지정하는 명령문으로 version
시작해야 합니다. 지원되는 버전에는 1.0 및 1.1이 포함됩니다. SLAX 버전 1.0은 XML 버전 1.0 및 XSLT 버전 1.1을 사용합니다.
version 1.0;
XSLT는 다음과 같습니다.
<xsl:stylesheet version="1.0">