analýza/alt2xml.txt
author František Kučera <franta-hg@frantovo.cz>
Sun, 08 Jun 2014 09:53:51 +0200
changeset 36 ad36a104623f
parent 29 7284f95da10e
child 39 a5020340362b
permissions -rw-r--r--
use AltInputSource instead of just systemId in canRead() and findReader()
     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 Vstupní formáty:
    31 	RegExp:
    32 		hledá v textu shodu s výrazem (typicky bude končit koncem řádku) a vrací skupiny z výrazu jako elementy
    33 	Javovské Properties:
    34 		proudové zpracování
    35 		komentáře převést na XML komentáře
    36 	INI:
    37 		sekce (případně vnořené)
    38 		klíč=hodnota
    39 	CSV:
    40 		hlavičky → elementy
    41 	HTML:
    42 		zprasené, atributy bez uvozovek, atd.
    43 		asi TagSoup parser
    44 	TXT:
    45 		co řádek, to element
    46 		číslování řádků (atribut)
    47 	ASN.1:
    48 		DER, BER…
    49 	YAML:
    50 		http://yaml.org/
    51 	JSON:
    52 		standardní struktura výstupního XML
    53 	Markdown:
    54 		https://github.com/sirthias/pegdown
    55 	Souborový systém:
    56 		adresářová struktura
    57 		atributy souborů (včetně rozšířených)
    58 		volitelně obsah souborů
    59 		zpracovat celý podstrom nebo volitelně jen soubory/adresáře vyhovující regulárnímu výrazu
    60 		vhodné pro konfiguraci programů
    61 	Jednoduché XML
    62 		definované odsazením
    63 
    64 Výstupní moduly:
    65 	prostá kopie XML
    66 	formátované XML: odsazení + volitelně barvy
    67 	XSD/DTD validace
    68 	XPath filtrování
    69 	XSLT
    70 	XQuery
    71 	Souborový systém (stromová struktura adresářů a souborů)
    72 	YAML, INI, JSON a další formáty
    73 
    74 CLI API:
    75 	--input-file <filename>
    76 	--input-stdin <systemId>
    77 	--input-url <systemId>
    78 
    79 	--system-id <systemId> (override SystemId from file/url, pokud začíná # → připojit za název souboru)
    80 
    81 	--reader-property <key> <value>
    82 
    83 	--default-namespace-uri <uri>
    84 	--default-namespace-prefix <prefix>
    85 
    86 	--output-file <filename>
    87 
    88 	--action <pluginName>
    89 
    90 	--action-property <key> <value>
    91 	--action-properties <array> (last option, opaque data follows)
    92 
    93 
    94 Self-documenting:
    95 	po vzoru JDBC ovladačů
    96 	jak pro vstupní XMLReadery, tak pro výstupní moduly
    97 	konfigurační volba má: název, titulek, popis, datový typ, výčet hodnot, povinnost
    98 	společné/generické volby definované na jednom místě
    99 	→ vygenerovat dokumentaci + bash-completion
   100 
   101 Odkazy:
   102 	TagSoup: http://mercury.ccil.org/~cowan/XML/tagsoup/
   103 	HotSAX: http://hotsax.sourceforge.net/ – HotSAX is a small fast SAX2 parser for HTML, XHTML and XML.
   104 	XOM: http://www.cafeconleche.org/XOM/ – XOM is fairly unique in that it is a dual streaming/tree-based API.
   105 	Jericho: http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/StreamedSource.html – Iterátor
   106 	SAX → DOM: http://www.java2s.com/Code/Java/XML/SaxtoDOMconverter.htm
   107 	XMLUnit: http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/TolerantSaxDocumentBuilder.html
   108 	ASN.1
   109 		http://www.lupa.cz/clanky/asn-1-8211-koncept-abstraktni-syntaxove-notace/
   110 		http://www.root.cz/clanky/analogie-asn1/
   111 		http://www.research.ibm.com/trl/projects/xml/xss4j/samples/asn1/Translator.java
   112 		http://www.bouncycastle.org/  – Pěkná knihovna pro práci s ASN.1 v Javě je součástí Bouncy Castle Crypto APIs
   113 		https://en.wikipedia.org/wiki/XML_Encoding_Rules – XML Encoding Rules (XER)