analýza/alt2xml.txt
author František Kučera <franta-hg@frantovo.cz>
Mon, 16 Jun 2014 13:16:45 +0200
changeset 45 ce2013823604
parent 39 a5020340362b
child 54 3d5cc308e268
permissions -rw-r--r--
AbstractAction → AbstractHandlerAction; akce dostanou rovnou SAXParser a InputSource
     1 Slouží k načítání souborů ve všelijakých syntaxích (json, ini atd.) tak,
     2 aby s nimi následně šlo pracovat jako s XML.
     3 
     4 SAXParserFactory → SAXParser → XMLReader
     5 
     6 Nejdůležitější je XMLReader, tam se provádí vlastní načítání exotického souboru.
     7 
     8 Aby se použila správná (naše) továrna, je potřeba udělat něco z následujícího:
     9 	– nastavit systémovou vlastnost „javax.xml.parsers.SAXParserFactory“
    10 	– použít Services API… viz JavaDoc k newInstance()
    11 	– předat název třídy továrny jako parametr newInstance(…, …);
    12 
    13 Pak načítáme soubory, jako by to bylo XML:
    14 	SAXParserFactory továrna = SAXParserFactory.newInstance();
    15 	SAXParser parser = továrna.newSAXParser();
    16 	parser.parse(new File("data/vstup.json"), h);
    17 
    18 Nikde sice nejsou žádné ostré závorky (např. JSON používá {} a []),
    19 ale používáme stejné API a všechny navazující nástroje jako u opravdového XML.
    20 
    21 Náš SAXParser používá SuperXMLReader, který rozhoduje, který konkrétní parser se použije.
    22 
    23 
    24 Moduly řešit přes Features?
    25 
    26 Kódování pro převod všech znaků na název XML elementu/atributu
    27 
    28 Možnost zakódovat properties XMLReaderu a skutečné SystemId do URI SystemId.
    29 
    30 Komentáře přes LexicalHandler
    31 	To set the LexicalHandler for an XML reader, use the setProperty method
    32 	with the property name http://xml.org/sax/properties/lexical-handler
    33 	and an object implementing this interface (or null) as the value.
    34 	If the reader does not report lexical events, it will throw
    35 	a SAXNotRecognizedException when you attempt to register the handler.
    36 
    37 Vstupní formáty:
    38 	RegExp:
    39 		hledá v textu shodu s výrazem (typicky bude končit koncem řádku) a vrací skupiny z výrazu jako elementy
    40 	Javovské Properties:
    41 		proudové zpracování
    42 		komentáře převést na XML komentáře
    43 	INI:
    44 		sekce (případně vnořené)
    45 		klíč=hodnota
    46 	CSV:
    47 		hlavičky → elementy
    48 	HTML:
    49 		zprasené, atributy bez uvozovek, atd.
    50 		asi TagSoup parser
    51 	TXT:
    52 		co řádek, to element
    53 		číslování řádků (atribut)
    54 	ASN.1:
    55 		DER, BER…
    56 	YAML:
    57 		http://yaml.org/
    58 	JSON:
    59 		standardní struktura výstupního XML
    60 	Markdown:
    61 		https://github.com/sirthias/pegdown
    62 	Souborový systém:
    63 		adresářová struktura
    64 		atributy souborů (včetně rozšířených)
    65 		volitelně obsah souborů
    66 		volitelně počítat hashe
    67 		zpracovat celý podstrom nebo volitelně jen soubory/adresáře vyhovující regulárnímu výrazu
    68 		vhodné pro konfiguraci programů
    69 	Jednoduché XML
    70 		definované odsazením
    71 
    72 Výstupní moduly:
    73 	prostá kopie XML
    74 	formátované XML: odsazení + volitelně barvy
    75 	XSD/DTD validace
    76 	XPath filtrování
    77 	XSLT
    78 	XQuery
    79 	Souborový systém (stromová struktura adresářů a souborů)
    80 	YAML, INI, JSON a další formáty
    81 
    82 CLI API:
    83 	--input-file <filename>
    84 	--input-stdin <systemId>
    85 	--input-url <systemId>
    86 
    87 	--system-id <systemId> (override SystemId from file/url, pokud začíná # → připojit za název souboru)
    88 
    89 	--reader-property <key> <value>
    90 
    91 	--default-namespace-uri <uri>
    92 	--default-namespace-prefix <prefix>
    93 
    94 	--output-file <filename>
    95 
    96 	--action <pluginName>
    97 
    98 	--action-property <key> <value> (recommended way of parametrization, self-documenting)
    99 	-- <array> (last option/separator, followed by  opaque data for output module)
   100 
   101 
   102 Self-documenting:
   103 	po vzoru JDBC ovladačů
   104 	jak pro vstupní XMLReadery, tak pro výstupní moduly
   105 	konfigurační volba má: název, titulek, popis, datový typ, výčet hodnot, povinnost
   106 	společné/generické volby definované na jednom místě
   107 	→ vygenerovat dokumentaci + bash-completion
   108 
   109 Odkazy:
   110 	TagSoup: http://mercury.ccil.org/~cowan/XML/tagsoup/
   111 	HotSAX: http://hotsax.sourceforge.net/ – HotSAX is a small fast SAX2 parser for HTML, XHTML and XML.
   112 	XOM: http://www.cafeconleche.org/XOM/ – XOM is fairly unique in that it is a dual streaming/tree-based API.
   113 	Jericho: http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/StreamedSource.html – Iterátor
   114 	SAX → DOM: http://www.java2s.com/Code/Java/XML/SaxtoDOMconverter.htm
   115 	XMLUnit: http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/TolerantSaxDocumentBuilder.html
   116 	ASN.1
   117 		http://www.lupa.cz/clanky/asn-1-8211-koncept-abstraktni-syntaxove-notace/
   118 		http://www.root.cz/clanky/analogie-asn1/
   119 		http://www.research.ibm.com/trl/projects/xml/xss4j/samples/asn1/Translator.java
   120 		http://www.bouncycastle.org/  – Pěkná knihovna pro práci s ASN.1 v Javě je součástí Bouncy Castle Crypto APIs
   121 		https://en.wikipedia.org/wiki/XML_Encoding_Rules – XML Encoding Rules (XER)