규칙 집합 정의에 대한 자세한 내용은 Portal Server 관리 설명서를 참조하십시오. 새 규칙 집합을 만든 후 필수 규칙을 정의해야 합니다.
이 부분에서는 다음 주제를 다룹니다.
규칙 집합 DTD:
<?xml version="1.0" encoding="UTF-8"?> <!-- The following constraints are not represented in DTD, but taken care of programmatically 1. In a Rule, All Mandatory attributes cannot be "*". 2. Only one instance of the below elements is allowed, but in any order. 1)HTMLRules 2)JSRules 3)XMLRules 3. ID should always be in lower case. --> <!ENTITY % eURL ’URL’> <!ENTITY % eEXPRESSION ’EXPRESSION’> <!ENTITY % eDHTML ’DHTML’> <!ENTITY % eDJS ’DJS’> <!ENTITY % eSYSTEM ’SYSTEM’> <!ENTITY % ruleSetElements ’(HTMLRules | JSRules | XMLRules)?’> <!ENTITY % htmlElements ’(Form | Applet | Attribute)*’> <!ENTITY % jsElements ’(Variable | Function)*’> <!ENTITY % xmlElements ’(Attribute | TagText)*’> <!ELEMENT RuleSet (%ruleSetElements;,%ruleSetElements;,%ruleSetElements;)> <!ATTLIST RuleSet id ID #REQUIRED extends CDATA "none" > <!-- Rules for identifying rules in HTML content --> <!ELEMENT HTMLRules (%htmlElements;)> <!ELEMENT Form EMPTY> <!ATTLIST Form name CDATA #REQUIRED field CDATA #REQUIRED valuePatterns CDATA "" source CDATA "*" > <!ELEMENT Applet EMPTY> <!ATTLIST Applet code CDATA #REQUIRED param CDATA "*" valuePatterns CDATA "" source CDATA "*" > <!-- Rules for identifying rules in JS content --> <!ELEMENT JSRules (%jsElements;)> <!ELEMENT Variable EMPTY> <!ATTLIST Variable name CDATA #REQUIRED type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS; | %eSYSTEM;) "EXPRESSION" source CDATA "*" > <!ELEMENT Function EMPTY> <!ATTLIST Function name CDATA #REQUIRED paramPatterns CDATA #REQUIRED type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS;) "EXPRESSION" source CDATA "*" > <!-- Rules for identifying rules in XML content --> <!ELEMENT XMLRules (%xmlElements;)> <!ELEMENT TagText EMPTY> <!ATTLIST TagText tag CDATA #REQUIRED attributePatterns CDATA "" source CDATA "*" > <!ELEMENT Attribute EMPTY> <!ATTLIST Attribute name CDATA #REQUIRED tag CDATA "*" valuePatterns CDATA "" type (%eURL; | %eDHTML; | %eDJS; ) "URL" source CDATA "*" >
*를 규칙 값의 일부로 사용할 수 있지만 필수 속성 값에는 *만 사용할 수 없습니다. 이러한 규칙은 무시되지만 RuleSetInfo 로그 파일에 메시지가 기록됩니다. 이 로그 파일에 대한 자세한 내용은 디버깅 파일 이름을 참조하십시오.
이 절에는 예제 규칙 집합이 들어 있습니다. 140페이지의 "사례 연구"를 통해 Rewriter에서 이러한 규칙을 해석하는 방식을 살펴볼 수 있습니다.
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- Rules for integrating a mail client with the gateway. --> <!DOCTYPE RuleSet SYSTEM "jar://rewriter.jar/resources/RuleSet.dtd"> <RuleSet type="GROUPED" id="owa"> <HTMLRules> <Attribute name="action" /> <Attribute name="background" /> <Attribute name="codebase" /> <Attribute name="href" /> <Attribute name="src" /> <Attribute name="lowsrc" /> <Attribute name="imagePath" /> <Attribute name="viewClass" /> <Attribute name="emptyURL" /> <Attribute name="draftsURL" /> <Attribute name="folderURL" /> <Attribute name="prevMonthImage" /> <Attribute name="nextMonthImage" /> <Attribute name="style" /> <Attribute name="content" tag="meta" /> </HTMLRules> <JSRules> <!-- Rules for Rewriting JavaScript variables in URLs --> <Variable name="URL"> _fr.location </Variable> <Variable name="URL"> g_szUserBase </Variable> <Variable name="URL"> g_szPublicFolderUrl </Variable> <Variable name="URL"> g_szExWebDir </Variable> <Variable name="URL"> g_szViewClassURL </Variable> <Variable name="URL"> g_szVirtualRoot </Variable> <Variable name="URL"> g_szBaseURL </Variable> <Variable name="URL"> g_szURL </Variable> <Function name="EXPRESSION" name="NavigateTo" paramPatterns="y"/> </JSRules> <XMLRules> <Attribute name="xmlns"/> <Attribute name="href" tag="a"/> <TagText tag="baseroot" /> <TagText tag="prop2" /> <TagText tag="prop1" /> <TagText tag="img" /> <TagText tag="xsl:attribute" attributePatterns="name=src" /> </XMLRules> </RuleSet>
규칙을 작성하는 일반적인 절차는 다음과 같습니다.
컨텐트를 다시 작성해야 하는 HTML 페이지가 있는 디렉토리를 확인합니다.
이 디렉토리에서 다시 작성해야 하는 페이지를 확인합니다.
각 페이지에서 다시 작성해야 하는 URL을 확인합니다. "http" 및 "/"를 검색하여 대부분의 URL이 간단하게 확인할 수 있습니다.
URL의 컨텐트 유형 확인: HTML, JavaScript 또는 XML.
Access Manager 관리 콘솔의 [Portal Server 구성] 아래에 있는 [Rewriter 서비스]에서 필요한 규칙 집합을 편집하여 이러한 각 URL을 다시 쓰기 위해 필요한 규칙을 작성합니다.
모든 규칙을 해당 도메인에 대한 하나의 규칙 집합으로 결합시킵니다.
규칙 집합을 작성하는 경우 다음 사항을 주의하십시오.
특정 호스트의 우선 순위는 가장 긴 URI 대응부터 결정됩니다. 예를 들어, 다음 규칙 집합에서
mail1.central.abc.com|iplanet_mail_ruleset *.sfbay.abc.com|sfbay_ruleset *.abc.com|generic_ruleset
sfbay_ruleset이 가장 긴 대응이기 때문에 사용됩니다.
규칙 집합의 규칙들은 규칙이 특정 구문과 일치할 때까지 페이지의 각 구문에 차례로 적용됩니다.
규칙을 작성할 때 규칙의 순서에 주의하십시오. 규칙은 규칙 집합에 있는 순서대로 페이지의 구문에 적용됩니다. 특정한 규칙과 "*"를 포함한 일반적 규칙이 있는 경우, 특정한 규칙을 먼저 정의한 다음 일반적 규칙을 적용하십시오. 그렇게 하지 않으면 특정한 규칙을 발견하기 전에 모든 구문에 일반 규칙이 적용됩니다.
모든 규칙은 <RuleSet> </RuleSet> 태그 내에 넣어야 합니다.
HTML 컨텐트를 다시 써야 하는 모든 규칙은 규칙 집합의 <HTMLRules> </HTMLRules> 부분에 포함시키십시오.
JavaScript 컨텐트를 다시 써야 하는 모든 규칙은 규칙 집합의 <JSRules> </JSRules> 부분에 포함시키십시오.
XML 컨텐트를 다시 써야 하는 모든 규칙은 규칙 집합의 <XMLRules> </XMLRules> 부분에 포함시키십시오.
인트라넷 페이지에서, 다시 써야 하는 URL을 확인하고 규칙 집합의 해당 부분(HTML, JSRules 또는 XMLRules)에 필요한 규칙을 포함시키십시오.
규칙 집합을 필요한 도메인에 할당합니다.
게이트웨이를 다시 시작하여 변경 사항을 적용합니다.
gateway-install-root/SUNWportal/bin/gateway -n gateway-profile-name start
규칙 집합의 루트 요소에는 두 가지 속성이 있습니다.
RuleSetName. 예를 들어 default_ruleset입니다. 이 이름은 규칙 집합에서 URI 매핑에 참조합니다.
Extends. 이 속성은 규칙 집합의 상속 기능을 참조합니다. 값은 규칙 집합을 유도할 기준 집합을 가리킵니다.
값 none을 사용하면 이 새로운 독립 규칙 집합이 다른 규칙 집합에 의존하지 않는 다는 것을 나타내며 RuleSetName을 지정하면 규칙 집합이 다른 규칙 집합에 의존한다는 것을 나타냅니다.
Rewriter에서는 재귀적 기능을 사용하여 대응되는 문자열 패턴의 끝까지에서 같은 패턴을 검색합니다.
예를 들어 Rewriter에서 다음 문자열을 구문 분석하는 경우
<a href="src=abc.jpg,src=bcd.jpg,src=xyz.jpg>
규칙
<Attribute name="href" valuePatterns="*src=**"/>
은 처음 나타나는 패턴만을 다시 작성하며 그 결과는 다음과 같습니다.
<a href="src=http://jane.sun.com/abc.jpg>
재귀적 옵션을 사용하는 경우
<Attribute name="href" valuePatterns="REC:*src=**"/>;
Rewriter는 대응되는 문자열 패턴에서 끝까지 같은 패턴을 찾기 때문에 다음과 같은 출력을 얻게 됩니다.
<a href="src=http://jane.sun.com/abc.jpg,src=http://jane.sun.com/bcd.jpg,src=http://jane.sun.com/xyz.jpg>