2017-02-14 1 views
1

나는 s- 표현식에서 간단한 문서를 표현하는 방법을 이해하려고 노력하고있다. 여기에 의미하는 바가 있습니다. 이제 나는이 간단한 HTML 구조를 가지고 있다고 가정 해 봅시다 :간단한 문서를 s-exp로 표현하는 방법은 무엇입니까?

<h1>Document Title</h1> 
<p>Paragraph with some text.</p> 
<p>Paragraph with some <strong>bold</strong> text.</p> 

는 또한의 내가 원래 태그 기원을 잃고 괜찮아 그냥 구조를 유지한다고 가정하자. 이것이 sexp로 어떻게 표현 될 수 있습니까? (Clojure의 사용) 내 최초의 시도는 다음과 같다,하지만 난 그게 맞는지 모르겠어요 :

(def sexp-doc '("Document Title" 
       (""()) 
       ("This is a paragraph with some text."()) 
       (""()) 
       ("This is a paragraph with" ("bold"()) ("text."())))) 

답변

3

나는 다음과 같은 경우에 Hiccup's syntax를 사용하는 것이 좋습니다 :

(require '[clojure.string :as str] 
     '[hiccup.core :as hiccup]) 

(def document 
    [[:h1 "Document Title"] 
    [:p "Paragraph with some text."] 
    [:p "Paragraph with some " [:strong "bold"] " text."]]) 

(println (str/join "\n" (map #(hiccup/html %) document))) 
;; <h1>Document Title</h1> 
;; <p>Paragraph with some text.</p> 
;; <p>Paragraph with some <strong>bold</strong> text.</p> 
;;=> nil 

당신이 HTML 문자열로 다시 변환 할 필요가없는 경우, 분명히 당신은 히컵 의존성을 필요로하지 않는다; 나는이 세 가지 벡터 각각이 유효한 딸꾹개임을 입증하기 위해 간단히 여기에 넣었습니다. '당신이 일을 인용하는 경우

  • 을 수행 할 수 있습니다 :이 구문 대신 목록의 벡터를 사용하기 때문에

    , 당신은 당신에게 몇 가지 장점을 제공하는 일을 인용하거나 직접 list 기능을 사용할 필요가 없습니다 t 통화 기능은 각 양식에 대한 list 함수를 호출해야하는 경우가

을 읽을 혼잡 및 하드 도착, "히컵 리터럴"

  • 의 내부 형태를 구성하고 당신은 당신의 자신을 마련하려면 기능을 사용할 태그 기존의 HTML 태그를 사용하면 Hiccup의 구문 내에서 그렇게하지 못하게 할 수 있습니다.

  • 1

    S-표현은 나무이며, 따라서 아래의 예는 HTML 문서의 표현 될 수 있습니다

    '(html (head (title "some title") (meta "some meta")) 
         (body (h1 "Hello, World!") (p "This is the" (strong "body") "text")) 
    

    속성은 태그 attributes으로 첫 번째 요소를 가진 모든 요소에 의해 구현 될 수있는 속성이 실제로 한 르를 나타 내기 때문에 그것은 꽤 아니다

    '(p (attributes 
        (attribute (name "style") 
           (value "margin: 10px;")) 
        (attribute (name "title") 
           (value "Ingress"))) 
        "Once upon a time ....) 
    

    구조가 될 필요가있는 각 태그에 대한 주요 값 데이터의 제 생각에 W3C는 실제로 이와 비슷한 것을 제안했지만 문서를 훨씬 더 복잡하게 만듭니다.

    +0

    내가 실제로하려는 것은 하나의 태그를 기준으로 문서 내용을 표현한 다음 메타 데이터 속성에 html 데이터 (일부가 있다고 가정)를 저장하는 것입니다. 그러나 이것이 아직도 어떻게 보일지를 알아 냈습니다. – fraxture

    +0

    @fraxture 태그 하나만 있으면 문서 구조가 보존되지 않습니다. 필요에 따라 세부 수준 만 HTML에 통합하여 구조를 모델링 할 필요가 없으며 논리를 순서대로 임베드 할 수 있습니다. 예 : 단 하나의 헤드 라인 만 허용하면 단락은 태그가없는 텍스트 목록으로 수행 될 수 있습니다. 왜냐하면 독자적인 규칙에 따라 HTML을 다시 만들 수 있기 때문입니다. – Sylwester

    +0

    구조로 보았을 때 헤더, 어쩌면 섹션 및 단락을 의미합니다. 당신이 여기서 말하는 것은 : "단 한 표제 만 허용하고 단락은 태그가없는 텍스트 목록으로 할 수 있습니다"는 제가 가고자하는 방향 인 것 같습니다. 그러나 나는 이것이 어떻게 생겼는지 모르겠습니다. 위의 예가 결함이 있습니까? 그렇다면 대체 사례를 줄 수있는 기회가 있습니까? – fraxture

    관련 문제