analýza/alt2xml.txt
author František Kučera <franta-hg@frantovo.cz>
Sat, 06 Sep 2014 21:15:47 +0200
changeset 88 9860586b3b87
parent 54 3d5cc308e268
child 96 9ca02f0f6751
permissions -rw-r--r--
in-ini: encode section names with spaces
     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 	ESC:
    55 		převod escapovacích sekvencí na XHTML
    56 		barvy, tučné písmo
    57 	ASN.1:
    58 		DER, BER…
    59 	YAML:
    60 		http://yaml.org/
    61 	JSON:
    62 		standardní struktura výstupního XML
    63 	Markdown:
    64 		https://github.com/sirthias/pegdown
    65 	Souborový systém:
    66 		adresářová struktura
    67 		atributy souborů (včetně rozšířených)
    68 		volitelně obsah souborů
    69 		volitelně počítat hashe
    70 		zpracovat celý podstrom nebo volitelně jen soubory/adresáře vyhovující regulárnímu výrazu
    71 		vhodné pro konfiguraci programů
    72 	XML.dir
    73 		taky souborový systém
    74 		ale ne obecný – specifická struktura
    75 		umožňuje popsat prakticky libovolné XML
    76 		adresář = element
    77 		soubor = atribut nebo textový uzel
    78 		číslování souborů/adresářů → pořadí uzlů
    79 	Jednoduché XML
    80 		definované odsazením
    81 
    82 Výstupní moduly:
    83 	prostá kopie XML
    84 	formátované XML: odsazení + volitelně barvy
    85 	XSD/DTD validace
    86 	XPath filtrování
    87 	XSLT
    88 	XQuery
    89 	Souborový systém (stromová struktura adresářů a souborů)
    90 	YAML, INI, JSON a další formáty
    91 
    92 CLI API:
    93 	--input-file <filename>
    94 	--input-stdin <systemId>
    95 	--input-url <systemId>
    96 
    97 	--system-id <systemId> (override SystemId from file/url, pokud začíná # → připojit za název souboru)
    98 
    99 	--reader-property <key> <value>
   100 
   101 	--default-namespace-uri <uri>
   102 	--default-namespace-prefix <prefix>
   103 
   104 	--output-file <filename>
   105 
   106 	--action <pluginName>
   107 
   108 	--action-property <key> <value> (recommended way of parametrization, self-documenting)
   109 	-- <array> (last option/separator, followed by  opaque data for output module)
   110 
   111 
   112 Self-documenting:
   113 	po vzoru JDBC ovladačů
   114 	jak pro vstupní XMLReadery, tak pro výstupní moduly
   115 	konfigurační volba má: název, titulek, popis, datový typ, výčet hodnot, povinnost
   116 	společné/generické volby definované na jednom místě
   117 	→ vygenerovat dokumentaci + bash-completion
   118 
   119 Odkazy:
   120 	TagSoup: http://mercury.ccil.org/~cowan/XML/tagsoup/
   121 	HotSAX: http://hotsax.sourceforge.net/ – HotSAX is a small fast SAX2 parser for HTML, XHTML and XML.
   122 	XOM: http://www.cafeconleche.org/XOM/ – XOM is fairly unique in that it is a dual streaming/tree-based API.
   123 	Jericho: http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/StreamedSource.html – Iterátor
   124 	SAX → DOM: http://www.java2s.com/Code/Java/XML/SaxtoDOMconverter.htm
   125 	XMLUnit: http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/TolerantSaxDocumentBuilder.html
   126 	ASN.1
   127 		http://www.lupa.cz/clanky/asn-1-8211-koncept-abstraktni-syntaxove-notace/
   128 		http://www.root.cz/clanky/analogie-asn1/
   129 		http://www.research.ibm.com/trl/projects/xml/xss4j/samples/asn1/Translator.java
   130 		http://www.bouncycastle.org/  – Pěkná knihovna pro práci s ASN.1 v Javě je součástí Bouncy Castle Crypto APIs
   131 		https://en.wikipedia.org/wiki/XML_Encoding_Rules – XML Encoding Rules (XER)