franta-hg@29: Slouží k načítání souborů ve všelijakých syntaxích (json, ini atd.) tak, franta-hg@2: aby s nimi následně šlo pracovat jako s XML. franta-hg@2: franta-hg@2: SAXParserFactory → SAXParser → XMLReader franta-hg@2: franta-hg@2: Nejdůležitější je XMLReader, tam se provádí vlastní načítání exotického souboru. franta-hg@2: franta-hg@2: Aby se použila správná (naše) továrna, je potřeba udělat něco z následujícího: franta-hg@2: – nastavit systémovou vlastnost „javax.xml.parsers.SAXParserFactory“ franta-hg@2: – použít Services API… viz JavaDoc k newInstance() franta-hg@2: – předat název třídy továrny jako parametr newInstance(…, …); franta-hg@2: franta-hg@2: Pak načítáme soubory, jako by to bylo XML: franta-hg@2: SAXParserFactory továrna = SAXParserFactory.newInstance(); franta-hg@2: SAXParser parser = továrna.newSAXParser(); franta-hg@2: parser.parse(new File("data/vstup.json"), h); franta-hg@29: franta-hg@29: Nikde sice nejsou žádné ostré závorky (např. JSON používá {} a []), franta-hg@2: ale používáme stejné API a všechny navazující nástroje jako u opravdového XML. franta-hg@2: franta-hg@2: Náš SAXParser používá SuperXMLReader, který rozhoduje, který konkrétní parser se použije. franta-hg@2: franta-hg@12: franta-hg@12: Moduly řešit přes Features? franta-hg@12: franta-hg@29: Kódování pro převod všech znaků na název XML elementu/atributu franta-hg@29: franta-hg@29: Možnost zakódovat properties XMLReaderu a skutečné SystemId do URI SystemId. franta-hg@29: franta-hg@39: Komentáře přes LexicalHandler franta-hg@39: To set the LexicalHandler for an XML reader, use the setProperty method franta-hg@39: with the property name http://xml.org/sax/properties/lexical-handler franta-hg@39: and an object implementing this interface (or null) as the value. franta-hg@39: If the reader does not report lexical events, it will throw franta-hg@39: a SAXNotRecognizedException when you attempt to register the handler. franta-hg@39: franta-hg@12: Vstupní formáty: franta-hg@29: RegExp: franta-hg@29: hledá v textu shodu s výrazem (typicky bude končit koncem řádku) a vrací skupiny z výrazu jako elementy franta-hg@29: Javovské Properties: franta-hg@29: proudové zpracování franta-hg@29: komentáře převést na XML komentáře franta-hg@29: INI: franta-hg@29: sekce (případně vnořené) franta-hg@29: klíč=hodnota franta-hg@29: CSV: franta-hg@29: hlavičky → elementy franta-hg@29: HTML: franta-hg@29: zprasené, atributy bez uvozovek, atd. franta-hg@29: asi TagSoup parser franta-hg@29: TXT: franta-hg@29: co řádek, to element franta-hg@29: číslování řádků (atribut) franta-hg@29: ASN.1: franta-hg@29: DER, BER… franta-hg@29: YAML: franta-hg@29: http://yaml.org/ franta-hg@29: JSON: franta-hg@29: standardní struktura výstupního XML franta-hg@29: Markdown: franta-hg@29: https://github.com/sirthias/pegdown franta-hg@29: Souborový systém: franta-hg@29: adresářová struktura franta-hg@29: atributy souborů (včetně rozšířených) franta-hg@29: volitelně obsah souborů franta-hg@39: volitelně počítat hashe franta-hg@29: zpracovat celý podstrom nebo volitelně jen soubory/adresáře vyhovující regulárnímu výrazu franta-hg@29: vhodné pro konfiguraci programů franta-hg@29: Jednoduché XML franta-hg@29: definované odsazením franta-hg@29: franta-hg@29: Výstupní moduly: franta-hg@29: prostá kopie XML franta-hg@29: formátované XML: odsazení + volitelně barvy franta-hg@29: XSD/DTD validace franta-hg@29: XPath filtrování franta-hg@29: XSLT franta-hg@29: XQuery franta-hg@29: Souborový systém (stromová struktura adresářů a souborů) franta-hg@29: YAML, INI, JSON a další formáty franta-hg@29: franta-hg@27: CLI API: franta-hg@27: --input-file franta-hg@27: --input-stdin franta-hg@27: --input-url franta-hg@29: franta-hg@29: --system-id (override SystemId from file/url, pokud začíná # → připojit za název souboru) franta-hg@29: franta-hg@27: --reader-property franta-hg@29: franta-hg@27: --default-namespace-uri franta-hg@27: --default-namespace-prefix franta-hg@29: franta-hg@27: --output-file franta-hg@29: franta-hg@27: --action franta-hg@29: franta-hg@39: --action-property (recommended way of parametrization, self-documenting) franta-hg@39: -- (last option/separator, followed by opaque data for output module) franta-hg@27: franta-hg@12: franta-hg@29: Self-documenting: franta-hg@29: po vzoru JDBC ovladačů franta-hg@29: jak pro vstupní XMLReadery, tak pro výstupní moduly franta-hg@29: konfigurační volba má: název, titulek, popis, datový typ, výčet hodnot, povinnost franta-hg@29: společné/generické volby definované na jednom místě franta-hg@29: → vygenerovat dokumentaci + bash-completion franta-hg@12: franta-hg@12: Odkazy: franta-hg@12: TagSoup: http://mercury.ccil.org/~cowan/XML/tagsoup/ franta-hg@29: HotSAX: http://hotsax.sourceforge.net/ – HotSAX is a small fast SAX2 parser for HTML, XHTML and XML. franta-hg@12: XOM: http://www.cafeconleche.org/XOM/ – XOM is fairly unique in that it is a dual streaming/tree-based API. franta-hg@12: Jericho: http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/StreamedSource.html – Iterátor franta-hg@12: SAX → DOM: http://www.java2s.com/Code/Java/XML/SaxtoDOMconverter.htm franta-hg@12: XMLUnit: http://xmlunit.sourceforge.net/api/org/custommonkey/xmlunit/TolerantSaxDocumentBuilder.html franta-hg@12: ASN.1 franta-hg@12: http://www.lupa.cz/clanky/asn-1-8211-koncept-abstraktni-syntaxove-notace/ franta-hg@12: http://www.root.cz/clanky/analogie-asn1/ franta-hg@12: http://www.research.ibm.com/trl/projects/xml/xss4j/samples/asn1/Translator.java franta-hg@12: http://www.bouncycastle.org/ – Pěkná knihovna pro práci s ASN.1 v Javě je součástí Bouncy Castle Crypto APIs franta-hg@12: https://en.wikipedia.org/wiki/XML_Encoding_Rules – XML Encoding Rules (XER)