스위블
Sweble| 원저작자 | OSR 그룹 |
|---|---|
| 초기 릴리즈 | 2011년 5월 1일, 전([1] |
| 안정된 릴리스 | 2.0 / 2014년 9월 , 전([2] |
| 기입처 | 자바 |
| 운영 체제 | 크로스 플랫폼 |
| 유형 | 파서 |
| 면허증. | Apache 라이선스 |
| 웹 사이트 | sweble |
Sweble Wikitext 파서는[3] Wikipedia의 배후에 있는 소프트웨어인 MediaWiki에서 사용되는 Wikitext 마크업 언어를 해석하는 오픈 소스 도구입니다.최초 개발은 Hannes Dohrn이 2009년부터 2011년까지 Erlangen-Nuremberg 대학의 Dirk Riehle 교수의 오픈 소스 연구 그룹에서 박사 논문 프로젝트로 수행했습니다.이 결과는 2011년 [4]WikiSym 컨퍼런스에서 처음으로 대중에게 발표되었습니다.그 전에, 논문은[5] 독립된 과학적 안전 점검에 의해 검사되고 승인되었으며, ACM Press에 발표되었습니다.
Ohloh의[6] 통계를 바탕으로 파서는 주로 Java 프로그래밍 언어로 작성됩니다.그것은 [1]2011년 5월에 오픈소스되었다.파서 자체는 Rats! 파서 생성기를 사용하여 PEG(Parsing Expression Grammar)에서 생성됩니다.인코딩 검증은 JFlex로 작성된 플렉시블 어휘 분석기를 사용하여 이루어집니다.
Sweble Wikitext 파서의 설계에 관한 사전 인쇄 버전은 프로젝트 홈페이지에 [7]있습니다.또한 미디어에는 요약 페이지가 있습니다.Wiki의 미래.[8]
해석의 현재 상태
MediaWiki에서 사용되는 파서는 콘텐츠를 Wikitext에서 HTML로 직접 변환합니다.이 과정은 두 [9]단계로 이루어집니다.
- 템플릿(정보 상자 등), 변수 및 메타 정보 검색 및 확장(예: {{lc:ABC}}은(는) 소문자 abc로 변환됩니다.템플릿 페이지에는 이러한 메타 정보가 다시 포함될 수 있으므로 이러한 메타 정보도 평가해야 합니다(재귀).이 접근방식은 예를 들어 C++와 같은 프로그래밍 언어에서 사용되는 매크로 확장과 유사합니다.
- 완전히 확장된 텍스트 구문 분석 및 렌더링.이것에 의해, 1개의 구조를 인식하는 MediaWiki 의 내장 기능의 시퀀스에 의해서 텍스트가 처리된다.이들은 정규식을 사용하여 콘텐츠를 분석하고 = HEAD =와 동등한 HTML <h1>을 대체합니다.HEAD</h1>대부분의 경우 이러한 절차는 테이블 또는 목록을 제외하고 한 줄씩 수행됩니다.
Sweble의 저자가 논문에서 [7]쓴 것처럼 미디어의 소스 코드 분석Wiki의 파서는 별도의 변환 단계를 사용하는 전략이 다음과 같은 새로운 문제를 야기한다는 것을 보여주었습니다.대부분의 사용된 기능은 주변 요소의 범위를 고려하지 않습니다.그 결과 HTML 출력에 잘못된 네스팅이 발생합니다.그 결과 후자의 평가와 렌더링이 애매할 수 있으며 사용된 웹 브라우저의 렌더링 엔진에 따라 달라집니다.다음과 같이 기술합니다.
- 「개개의 처리 스텝에 의해서, 파서의 예기치 않은 동작이나 일관성이 없는 동작이 발생하는 일이 자주 있습니다.예를 들어 리스트는 표 셀 내에서 인식됩니다.단, 테이블 자체가 프레임 이미지 내에 표시되어 있으면 리스트는 [7]인식되지 않습니다.
2008년 WikiSym 컨퍼런스에서 논의된 바와 같이 언어의 정밀도와 컴포넌트의 디커플링이 부족하면 Wiki 소프트웨어의 진화가 저해됩니다.Wiki 콘텐츠에 기계적으로 처리할 수 있는 표현이 잘 지정되어 있으면 콘텐츠에 대한 접근성이 향상될 뿐만 아니라 처리 [10]방법도 개선 및 확장될 수 있습니다.
또한 Wiki 콘텐츠의 객체 모델을 잘 정의하면 더 많은 도구를 사용할 수 있습니다.지금까지 MediaWiki의 새로운 파서를 구현하기 위한 수많은 시도가 있었습니다([1] 참조).그들 중 누구도 지금까지 성공하지 못했다.Sweble의 저자들은 이것이 그들의 문법 선택, 즉 잘 알려진 LALR(1)과 LL(k) 문법 때문일 수 있다고 말한다.이러한 문법은 문맥이 없는 문법의 서브셋에 불과하지만 Wikitext는 글로벌 파서 상태를 필요로 하기 때문에 문맥에 맞는 [7]언어로 간주할 수 있습니다.그 결과 파서는 Parsing Expression Grammar(PEG; 해석식 문법)에 기초하고 있습니다.
Sweble 구조
Sweble은 Wikitext를 해석하여 추상 구문 트리를 출력으로 생성합니다.이를 통해 잘못된 마크업 코드(예를 들어 테이블의 여러 셀에 걸쳐 있는 링크)에 의한 오류를 방지할 수 있습니다.추상 구문 트리 모델에 대한 자세한 설명은 Wikitext Object Model(WOM)[11]에 대한 기술 보고서에서 확인할 수 있습니다.
해석 단계
- 1. 부호화 검증
- Wikitext(예를 들어 Unicode의 제어 문자)에서는 가능한 모든 문자를 사용할 수 없기 때문에 실제 해석을 시작하기 전에 정리 단계가 필요합니다.또한 엔티티에 대한 결과 이름을 고유하게 만들어 이후의 단계를 용이하게 하기 위해 일부 내부 이름이 수행됩니다.이 프로세스에서는 파서의 프리픽스로 사용되는 문자가 이스케이프 또는 변경되지 않았는지 확인해야 합니다.단, 이 단계에서는 입력에서 문자가 제거되어 정보가 손실되지 않아야 합니다.
- 2. 전처리
- 잘못된 문자에서 텍스트를 삭제한 후 Wikitext를 확장할 준비가 됩니다.이를 위해 XML과 같은 코멘트, 리다이렉션 등의 메타 정보, 조건부 태그 및 태그 확장자가 검색됩니다.후자는 각각 파서 함수 또는 변수와 유사하게 처리되는 XML 요소입니다.이름을 알 수 없는 XML 요소는 일반 텍스트로 취급됩니다.
이 단계의 결과는 대부분 텍스트 노드로 구성되지만 링크, 트랜스클루전 노드 및 태그 확장의 노드를 리디렉션하는 AST입니다. - 3. 확장
- MediaWiki의 페이지는 템플릿, 마법의 단어, 파서 기능 및 태그 [9]확장자를 사용하여 작성되는 경우가 많습니다.WYSIWYG 에디터에서 AST를 사용하려면 원래 페이지에서 확장되지 않은 transclusion 문과 파서 함수 호출을 보기 위해 확장을 생략해야 합니다.다만, HTML 페이지등의 컨텐츠를 렌더링 하는 경우는, 완전한 출력을 얻기 위해서 이러한 컨텐츠를 처리할 필요가 있습니다.또한 템플릿으로 사용되는 페이지 자체는 다른 페이지를 초월할 수 있으므로 확장은 재귀 프로세스로 간주됩니다.
- 4. 해석
- 구문 분석을 시작하기 전에 AST를 Wikitext로 다시 변환해야 합니다.이 단계가 완료되면 PEG 파서는 텍스트를 분석하여 Wiki 페이지의 구문과 의미를 캡처한AST를 생성합니다.
- 5. 후처리
- 이 단계에서는 태그가 일치하여 전체 출력 요소를 형성합니다.또한, 아포스트로피는 그 중 어느 것이 진짜 산문 아포스트로프인지 그리고 어떤 것이 위키텍스트에서 굵은 글씨 또는 이탤릭체 글꼴에 대한 마크업으로 해석되어야 하는지를 결정하기 위해 분석됩니다.단락의 조합도 이 단계에서 처리됩니다.이것에 의해 AST는 수목 구조상의 깊이 우선 횡단을 이용해 처리된다.
다양한 종류의 출력 렌더링과 분석 기능이 방문자로 구현됩니다.이를 통해 AST 데이터 구조를 데이터에서 작동하는 알고리즘에서 분리할 수 있습니다.
레퍼런스
- ^ a b "announcement of the first public release of Sweble". Archived from the original on 2015-09-16. Retrieved 2011-11-24.
- ^ "Sweble 2.0 released!". Archived from the original on 2015-02-27. Retrieved 2015-05-02.
- ^ "Homepage of the Sweble project". Archived from the original on 2015-04-30. Retrieved 2011-11-24.
- ^ "Announcement at WikiSym conference website". Archived from the original on 2013-07-03. Retrieved 2011-11-24.
- ^ Dohrn, Hannes; Riehle, Dirk (2011). "Design and Implementation of the Sweble Wikitext Parser: Unlocking the Structured Data of Wikipedia". Proceedings of the 7th International Symposium on Wikis and Open Collaboration (WikiSym 2011). ACM: 72–81. doi:10.1145/2038558.2038571.
- ^ Sweble 프로젝트의 Ohloh 페이지[영구 데드링크]
- ^ a b c d e "paper on the design of the Sweble Wikitext Parser" (PDF). Archived from the original (PDF) on 2015-02-24. Retrieved 2011-11-24.
- ^ MediaWiki의 Sweble 미래 페이지
- ^ a b 마크업 사양 - MediaWiki
- ^ Junghans, Martin; Riehle, Dirk; Gurram, Rama; Lopes, Mário; Yalcinalp, Umit (2008). "A grammar for standardized wiki markup". Proceedings of the 4th International Symposium on Wikis (WikiSym'08): 21:1–21:8. doi:10.1145/1822258.1822287. ISBN 9781605581286.
- ^ Dohrn, Hannes; Riehle, Dirk (July 2011). "WOM: An Object Model for Wikitext". Technical Report CS-2011-05 (July 2011). University of Erlangen.