CSV = JSON = XML = RSS - sgml/signature GitHub Wiki

CSV

Parser Name Parser Scalability Non-GitHub URL GitHub URL npmjs URL Programming Language
CSV.js Medium https://sourceforge.net/projects/csv-js https://github.com/knrz/CSV.js https://npmjs.com/package/csv.js JavaScript
SimpleCSV Low https://sourceforge.net/projects/simplecsv None None Java
SimpleCSV Low None None https://www.npmjs.com/package/simplecsv JavaScript
Sarissa Low https://sourceforge.net/projects/sarissa https://github.com/nikosd/Sarissa None JavaScript
XML for Script Medium https://sourceforge.net/projects/xmlforscript None None JavaScript

JSON

The XML could be minimized to this:

<names>
 <name1>
  <childName1/>
  <childName2/>
 </name1>

 <name2>
  <childName1/>
  <childName2/>
 </name2>
</names>
And the CSV to this:

name1  ChildName1
name1  ChildName2
name2  ChildName1
name2  ChildName2
with a JSON serialization like this:

{"names":
 [
  {
  "name1":
   [
    {
    "childName1":""
    },
    {
    "childName2":""
    }
   ]
  },
  {
  "name2":
   [
    {
    "childName1":""
    },
    {
    "childName2":""
    }
   ]
  }
 ]
}
In a row-oriented fashion, the XML could be:

<names>
 <name1 name="ChildName1|ChildName2">
 <name2 name="ChildName1|ChildName2">
</names>
And the corresponding CSV:

name1  ChildName1|ChildName2
name2  ChildName1|ChildName2
And the corresponding JSON:

{"names": [{"name1":"ChildName1|ChildName2"},{"name2":"ChildName1|ChildName2"}]}

Specifications

Tools

Templates

Platforms

Services

Code

Tutorials

Online Tools

Data Only Site

.plan
======================================================================

EPIC
Modern Craigslist as a fully static system with RSS ingest only
SVG assets only
no JS
no forms
no tables
no CDN
no server side logic except cron
navigation via sitemap only
LLM acceleration for SVG creation and cron debugging

----------------------------------------------------------------------
USER STORY 1
As a system designer
I want all content served as static HTML files
so that the site has zero runtime logic and maximum reliability

Requirements
- static HTML only
- no dynamic endpoints
- no server side request handling
- no JS
- no forms
- no tables

----------------------------------------------------------------------
USER STORY 2
As a content ingest maintainer
I want all listings to arrive through RSS feeds
so that ingest is deterministic and GUI free

Requirements
- RSS is the only input channel
- cron fetches RSS
- cron validates entries
- cron normalizes fields
- cron writes listings to static storage

----------------------------------------------------------------------
USER STORY 3
As a pipeline engineer
I want cron to regenerate all pages and assets
so that the site remains fresh without any live server logic

Requirements
- cron rebuilds listing pages
- cron rebuilds category slices
- cron rebuilds time slices
- cron rebuilds price band slices
- cron regenerates sitemap
- cron publishes atomically

----------------------------------------------------------------------
USER STORY 4
As an information architect
I want the sitemap to be the only navigation surface
so that the UI remains minimal and universally accessible

Requirements
- single sitemap file
- nested details sections allowed
- nested links allowed
- no other navigation elements
- no menus
- no forms
- no JS driven routing

----------------------------------------------------------------------
USER STORY 5
As a visual designer
I want all image assets to be SVG
so that the site is modern and resolution independent

Requirements
- SVG for icons
- SVG for category glyphs
- SVG for region markers
- SVG for price band markers
- SVG for time band timelines
- SVG for listing thumbnails when possible
- SVG must be hand written or generated by code
- no raster images

----------------------------------------------------------------------
USER STORY 6
As a procedural graphics engineer
I want SVG assets to be generated without any GUI
so that asset creation is deterministic and automatable

Requirements
- hand written SVG allowed
- SVG generated by scripts allowed
- SVG generated by templates allowed
- SVG generated by geometric rules allowed
- no GUI drawing tools
- no proprietary editors

----------------------------------------------------------------------
USER STORY 7
As a pipeline maintainer
I want LLMs to accelerate SVG creation
so that asset production is fast and consistent

Requirements
- LLM generates SVG from natural language descriptions
- LLM generates bulk SVG sets from taxonomies
- LLM linting for SVG normalization
- LLM debugging for SVG geometry issues

----------------------------------------------------------------------
USER STORY 8
As a pipeline debugger
I want LLMs to accelerate cron pipeline debugging
so that failures are diagnosed quickly without server logs or GUIs

Requirements
- LLM analyzes cron logs
- LLM reasons about pipeline ordering
- LLM inspects directory trees
- LLM validates static HTML
- LLM validates RSS
- LLM validates SVG
- LLM proposes self healing strategies

----------------------------------------------------------------------
USER STORY 9
As a performance engineer
I want the site to outperform modern JS heavy sites
so that users experience instant loads and zero failures

Requirements
- static files served directly by HTTP server
- no CDN required
- no JS bundles
- no hydration
- no client rendering
- no API calls
- minimal CSS
- pure HTML and SVG

----------------------------------------------------------------------
USER STORY 10
As a security engineer
I want the attack surface to be minimal
so that the site is nearly impossible to exploit

Requirements
- no JS
- no forms
- no cookies
- no sessions
- no dynamic endpoints
- no SQL
- no authentication
- read only document tree

----------------------------------------------------------------------
PROCEDURAL SVG DESIGN SYSTEM
Global geometry rules
- viewBox is 0 0 64 64
- grid uses multiples of 2 or 4
- stroke width is 2
- rounded corners use rx 4 and ry 4
- icons centered at 32 32

Style rules
- monochrome palette
- stroke is black
- fill is none
- stroke linejoin is round
- stroke linecap is round
- text avoided unless required

Icon taxonomy
- category icons
- state icons
- facet icons

Template patterns
- base icon template
- category icon template
- badge template

Procedural generation rules
- script inputs are category name and facet type
- script outputs are deterministic SVG files
- geometry uses circles rectangles lines polylines and simple paths
- no randomness allowed

LLM integration
- LLM generates SVG from descriptions
- LLM generates bulk SVG sets
- LLM lints SVG
- LLM debugs geometry

----------------------------------------------------------------------
RSS INGEST PIPELINE
RSS ingest rules
- RSS is the only input channel
- cron fetches feeds
- cron validates XML
- cron extracts fields
- cron writes normalized listing data
- cron triggers rebuild of affected pages

RSS normalization rules
- title extracted
- description extracted
- link extracted
- pubDate extracted
- category extracted
- all fields sanitized
- all fields written to static storage

----------------------------------------------------------------------

cron

```python
#!/usr/bin/env python3

# ======================================================================
# SAMPLE XML DATA
# fenced inside this python file for literate programming clarity
# ======================================================================
#
# ```xml
# <rss version="2.0">
#   <channel>
#     <title>sample feed</title>
#     <item>
#       <title>sample listing one</title>
#       <link>https://example.org/listing1</link>
#       <description>first sample description</description>
#       <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
#       <category>cars</category>
#     </item>
#     <item>
#       <title>sample listing two</title>
#       <link>https://example.org/listing2</link>
#       <description>second sample description</description>
#       <pubDate>Tue, 02 Jan 2024 00:00:00 GMT</pubDate>
#       <category>bicycles</category>
#     </item>
#   </channel>
# </rss>
# ```
#
# ======================================================================
# XSL STYLESHEET
# rss_extract.xsl
# fenced inside this python file for literate programming clarity
# ======================================================================
#
# ```xsl
# <?xml version="1.0"?>
# <xsl:stylesheet version="1.0"
#   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
#
#   <xsl:output method="text"/>
#
#   <xsl:template match="/">
#     <xsl:for-each select="rss/channel/item">
#       <xsl:text>title: </xsl:text>
#       <xsl:value-of select="title"/>
#       <xsl:text>&#10;</xsl:text>
#
#       <xsl:text>link: </xsl:text>
#       <xsl:value-of select="link"/>
#       <xsl:text>&#10;</xsl:text>
#
#       <xsl:text>pubdate: </xsl:text>
#       <xsl:value-of select="pubDate"/>
#       <xsl:text>&#10;</xsl:text>
#
#       <xsl:text>category: </xsl:text>
#       <xsl:value-of select="category"/>
#       <xsl:text>&#10;&#10;</xsl:text>
#     </xsl:for-each>
#   </xsl:template>
#
# </xsl:stylesheet>
# ```
#
# ======================================================================

import urllib.request
import libxslt
import libxml2

def extract_fenced_block(tag):
    lines = []
    capture = False
    fence = "# ```" + tag
    endfence = "# ```"
    with open(__file__, "r") as f:
        for line in f:
            if line.strip() == fence:
                capture = True
                continue
            if capture:
                if line.strip() == endfence:
                    break
                lines.append(line.lstrip("# ").rstrip("\n"))
    return "\n".join(lines)

def main():
    xml_string = extract_fenced_block("xml")
    xsl_string = extract_fenced_block("xsl")

    xml_doc = libxml2.parseDoc(xml_string)
    xsl_doc = libxml2.parseDoc(xsl_string)
    style = libxslt.parseStylesheetDoc(xsl_doc)
    result = style.applyStylesheet(xml_doc, {})
    output = style.saveResultToString(result)

    print(output)

    style.freeStylesheet()
    xml_doc.freeDoc()
    result.freeDoc()

if __name__ == "__main__":
    main()
⚠️ **GitHub.com Fallback** ⚠️