Katalog XML - XML catalog

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