Katalog XML - XML catalog
![]() | Tento článek má několik problémů. Prosím pomozte zlepšit to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
XML dokumenty obvykle odkazují na externí entity, například veřejné a / nebo ID systému pro Definice typu dokumentu. Tyto externí vztahy jsou vyjádřeny pomocí identifikátorů URI, obvykle jako adresy URL.
Absolutní adresy URL však fungují pouze v případě, že se k nim síť může dostat. Díky spoléhání se na vzdálené zdroje je zpracování XML náchylné k plánovaným i neplánovaným výpadkům sítě.
Relativní adresy URL jsou užitečné pouze v kontextu, kde byly původně vytvořeny. Například adresa URL „../../xml/dtd/docbookx.xml“ bude obvykle užitečná pouze za velmi omezených okolností.
Jedním ze způsobů, jak se těmto problémům vyhnout, je použít překladač entit (standardní součást SAXOFON ) nebo URI Resolver (standardní součást JAXP ). Resolver může prozkoumat identifikátory URI požadovaných prostředků a určit, jak nejlépe tyto požadavky uspokojit. The Katalog XML je dokument popisující mapování mezi odkazy na externí entity a lokálně uloženými ekvivalenty.
Příklad Catalog.xml
Následující jednoduchý katalog ukazuje, jak lze například poskytnout místně uložené DTD pro nástroj pro ověření stránky XHTML.
<?xml version="1.0"?> PUBLIC "- // OASIS // DTD Entity Resolution XML Catalog V1.0 // EN" „http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd“> xmlns ="urn: oasis: names: tc: entity: xmlns: xml: catalog" preferovat ="veřejnost"> publicId ="- // W3C // DTD XHTML 1.0 Strict // EN" uri =„dtd / xhtml1 / xhtml1-strict.dtd“/> publicId ="- // W3C // DTD XHTML 1.0 Transitional // EN" uri =„dtd / xhtml1 / xhtml1-transitional.dtd“/> publicId ="- // W3C // DTD XHTML 1.1 // EN" uri =„dtd / xhtml11 / xhtml11-flat.dtd“/> </catalog>
Tento katalog umožňuje řešení - // W3C // DTD XHTML 1.0 Strict // EN na místní URI dtd / xhtml1 / xhtml1-strict.dtd. Podobně poskytuje místní URI pro dva další veřejné ID.
Všimněte si, že výše uvedený dokument obsahuje DOCTYPE - to může způsobit, že se analyzátor pokusí získat přístup k URL ID systému pro DOCTYPE (tj. http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd) před plně funkčním překladačem katalogů, což je pravděpodobně nežádoucí. Chcete-li tomu zabránit, jednoduše odeberte deklaraci DOCTYPE.
Následující příklad to ukazuje a také ukazuje ekvivalent <system/> prohlášení jako alternativa k <public/> prohlášení.
<?xml version="1.0"?> xmlns ="urn: oasis: names: tc: entity: xmlns: xml: catalog"> systemId =„http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd“ uri =„dtd / xhtml1 / xhtml1-strict.dtd“/> systemId =„http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“ uri =„dtd / xhtml1 / xhtml1-transitional.dtd“/> systemId =„http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd“ uri =„dtd / xhtml11 / xhtml11-flat.dtd“/> </catalog>
Použití katalogu - příklad Java SAX
Překladače katalogů jsou k dispozici pro různé programovací jazyky. Následující příklad ukazuje, jak v prostředí Java a SAXOFON parser může být vytvořen pro analýzu nějakého vstupního zdroje, ve kterém org.apache.xml.resolver.tools.CatalogResolver se používá k překladu externích entit na instance v mezipaměti v mezipaměti. Tento resolver pochází z Apache Xerces ale nyní je součástí běhového prostředí Sun Java.
Je nutné vytvořit a SAXParser standardním způsobem pomocí továren. Překladač entit čtečky XML by měl být nastaven na výchozí nebo na zakázku vyrobený.
finále SAXParser saxParser = SAXParserFactory.novýInstance().novýSAXParser(); finále XMLReader čtenář = saxParser.getXMLReader(); finále ContentHandler psovod = ...; finále InputSource vstup = ...; čtenář.setEntityResolver( Nový CatalogResolver() ); čtenář.setContentHandler( psovod ); čtenář.analyzovat( vstup );
Je důležité zavolat na analyzovat metoda na čtečce, ne na analyzátoru SAX.
Reference
- Katalogy XML. OASIS Standard, verze 1.1. 7. října 2005.
- Řetězce entit XML a URI, Slunce
- Správce katalogu XML projekt na Sourceforge
![]() | tento článek potřebuje další nebo konkrétnější Kategorie.Leden 2020) ( |