2012-01-31 2 views
3

작업중인 응용 프로그램이 파일 가져 오기에서 많은 양의 데이터를 입력하고 이에 따라 데이터베이스 열을 업데이트합니다. 유효성 검사를 기반으로 모든 입력 값을 처리하고 그에 따라 데이터 변환을 수행하는 사용자 정의 규칙 엔진을 고안해야합니다. 전의.초급 문법 작성 가이드

응용 프로그램의 필드 중 하나가 제품 이름입니다. 따라서 우리가 구현해야하는 규칙 중 하나는 파일의 입력 값이 소문자 인 경우 제품 이름을 소문자에서 대문자로 변환하는 것입니다. 마찬가지로, 수행해야 할 많은 텍스트/수학적 변환이 있습니다. 이러한 이유로 각 속성에 대한 규칙을 정의하고 구문 분석 한 다음 규칙을 적용하는 사용자 정의 규칙 엔진이 필요합니다.

ANTLRJava의 파서 생성기 중 하나임을 알고 있습니다. 다음 쿼리에 대한 조언을 구합니다.
> 파서 생성기 작업 및 문법 구현을위한 모범 사례에 대한 일반 정보.

2>이 규칙 엔진을 완전히 설계해야하므로 아무도 내가 참조 할 수있는 샘플 규칙 엔진을 가르쳐 줄 수 있습니까? 바로 UI에서 데이터베이스 디자인에 이르기까지. 나는 데이터베이스에 대한 핵심 로직과 오라클을위한 UI, 자바에 대한 GWT를 사용하고

3> 거기에 내가 내 자신의 문법을 정의하는 경로를 따라하고 싶어하지만 자바

4>에 대한 주변의 다른 파서 생성기 및 파서 생성기 (parser generator)를 사용하여이 룰 엔진을 빌드하면, 고려해야 할 다른 접근법이 있습니까?

+0

파일이 상당히 구조적으로 복잡하지 않으면 문법이 아마도 당신의 인생을 더 어렵게 만듭니다. 간단한 문자열 테스트, 스위치 문 등으로 충분해야합니다. – Dan

+0

글쎄, 지금 우리가 가지고있는 규칙은 단지 시작해야한다. 내가 말했듯이, 문자열/수학적 변환이 생길 것이므로 더 복잡한 쿼리가 들어올 때 "간단한 문자열 테스트, switch 문"이 잘 확장되는지 확신 할 수 없습니다. Regex가 다음과 같이 가장 좋을지 확신하지 못합니다. 잘 –

+0

당신이 문제를 묘사 한 방식으로, 결합 할 열을 선택하거나, 출력 열을 선택하거나,이 데이터에 대해 임의의 계산을 수행 할 때 한계가 무엇인지 명확하지 않습니다. 당신이 할 수있는 것에 대해 신뢰할 수있는 * 한계 *를 정의 할 수 없다면, Turing 가능 언어 (Java는 괜찮은 것 같습니다)의 모든 힘이 필요합니다; 모든 열과 레코드를 얻으려면 최소한 데이터 액세스 및 업데이트만으로는 SQL의 힘이 필요합니다. 무엇을 기꺼이 계산할 것인지에 대한 명확한 한계가 있습니까? 왜 다른 언어가 도움이 될 것이라고 생각하십니까? –

답변

1

Java 기반 규칙 엔진 인 JbossRules (이전 Drools)를 사용하는 것이 좋습니다. 또는 스크립팅 엔진이 규칙을 구현하는 또 다른 방법 일 수도 있습니다 (예 : Apache Rhino (Javascript in Java)).

이 상황에서 직접 작성하는 것은 잔인한 것처럼 보이지만 최종 사용자가 규칙/스크립트를 작성하는 경우 보안을 강화할 수 있습니다.

편집은 의견 문의 사항에 답변을 : 나는 기존의 규칙 엔진을 사용하는 것이 좋습니다

(ALA JbossRules/Drools가) 대신 (규칙 구성 요소에 대한) 자신의 파서와 문법을 작성. 예를 들어 여기서보세요 : Drools.

규칙이 (DB 액세스 또는 계산 라이브러리를 사용해야 할 수도있는) 특수 논리의 경우 규칙에 사용되는 단일 Java API를 작성해야합니다 (규칙은 다른 코드에 깊이 액세스하지 않으므로/당신이 리펙토링 할 때). 이 조언은 어떤 규칙 엔진을 사용하든 관계없이 적용됩니다 (자신 또는 기존 규칙).

데이터 입력 파일의 데이터 형식이 이미 풀려 있고 규칙 형식 및 규칙 구문 분석에 대한 솔루션만을 찾고 있다고 가정합니다.

+0

입력 해 주셔서 감사합니다. 룰 엔진은 여기 "기능적인"사람들에 의해 사용될 것이고 우리의 어플리케이션에서 공개적으로 사용할 수 없을 것입니다. 하지만 파서 생성기를 사용하는 것은 변환 규칙을 중첩하는 수준이 될 수 있기 때문에 생각했습니다. 파서 생성기가 올바른 방법이라고 생각하십니까? –

+0

사용자 정의 문법과 함께 규칙 엔진을 사용하지 않거나 전혀 규칙을 사용하지 않을 것을 제안하셨습니까? –

+0

@ darkie15 질문에 대답 할 수있는 답변이 업데이트되었습니다. –

1

파서 생성기 인 JavaCC가 있으며 규칙 평가를위한 그루비가 있습니다. 스크립트 엔진을 사용할지 여부는 문법에 따라 다릅니다. 규칙을 자바 스크립트, 자바, 파이썬 등으로 표현할 수 없다면 새로운 언어로 작성하고 싶다면 파서 생성기를 사용해야합니다. 그러나 당신은 당신이 만든 방법 안에서 당신이 원하는 모든 것을 항상 할 수 있으며, 규칙들로부터 그것들을 호출 할 수 있습니다. 규칙은 스크립트 엔진에 의해 평가됩니다.