付録 Oracle Database10gリリース1の前に使用されていたAPIのマッピング
ここでは、Oracle Database Oracle9iリリースで使用可能なXML C APIと、後続のOracle Databaseで使用可能になった現在の統一XML C APIとのマッピングについて説明します。
関連項目:
『Oracle XML Developer's Kitプログラマーズ・ガイド』のフォーマット・モデルに関する項
A.1 Cパッケージの変更点
既存のC APIはoraxmlパッケージで使用できました。これには次のような特性がありました。
                     
- 
                           仕様はXMLコンテキスト( xmlctx)とXML文書間の1対1のマッピングに制限されていました。DOMから一度にアクセスできるのは常に1つのドキュメントのみでした。ただし、複数のドキュメントのデータへは、同時にアクセスできました。
- 
                           APIは常に一貫性があるとはかぎらず、 xmlctxの宣言に準拠しない場合もありました。
これに対して、新しい統一C APIではこれらの問題が解決されています。
- 
                           xmlctxは、複数の独立したドキュメント間で共有されます。
- 
                           すべてのAPIは xmlctxの宣言に準拠しています。
- 
                           XmlDestroy()コールにより明示的に破棄されるまで、各ドキュメントにはDOMから同時にアクセスできます。
A.2 初期化と解析順序の変更点
統一C APIではドキュメントの初期化と解析が変更されました。
例A-1 統一前のC APIを使用した初期化と解析の順序: 一度に1ドキュメント
次の擬似コードは、古いC APIを使用してドキュメントを一度に1つずつ初期化し、解析する方法を示しています。例A-2の例と比較してください。
#include <oraxml.h> uword err; xmlctx *ctx = xmlinit(&err, options); for (;;) { err = xmlparse(ctx, URI, options); ... /* DOM operations */ ... /* recycle memory from document */ xmlclean(ctx); } xmlterm(ctx);
例A-2 統一C APIを使用した初期化と解析の順序: 一度に1ドキュメント
次の擬似コードは、新しいC APIを使用してドキュメントを一度に1つずつ初期化し、解析する方法を示しています。例A-1の例と比較してください。
#include <xml.h> xmlerr err; xmldocnode *doc; xmlctx *xctx = XmlCreate(&err, options, NULL); for (;;) { doc = XmlLoadDom(xctx, &err, "URI", URI, NULL); ... /* DOM operations */ ... XmlFreeDocument(xctx, doc); } XmlDestroy(xctx);
例A-3 統一前のC APIを使用した初期化と解析の順序: 複数ドキュメントおよび同時DOMアクセス
次の擬似コードは、古いC APIを使用して同時DOMアクセスにより複数のドキュメントを初期化し、解析する方法を示しています。例A-4の例と比較してください。
xmlctx *ctx1 = xmlinitenc(&err, options); xmlctx *ctx2 = xmlinitenc(&err, options); err = xmlparse(ctx1, URI_1, options); err = xmlparse(ctx2, URI_2, options); ... /* DOM operations for both documents */ ... xmlterm(ctx1); xmlterm(ctx2);
例A-4 統一C APIを使用した初期化と解析の順序: 複数ドキュメントおよび同時DOMアクセス
次の擬似コードは、新しいC APIを使用して同時DOMアクセスにより複数のドキュメントを初期化し、解析する方法を示しています。例A-3の例と比較してください。
xmldocnode *doc1; xmldocnode *doc2; xmlctx *xctx = XmlCreate(&err, options, NULL); doc1 = XmlLoadDom(xctx, &err, "URI", URI_1, NULL); doc2 = XmlLoadDom(xctx, &err, "URI", URI_2, NULL); ... /* DOM operations for both documents*/ ... XmlFreeDocument(xctx, doc1); XmlFreeDocument(xctx, doc2); ... XmlDestroy(xctx);
A.3 oraxmlパッケージとxmlパッケージ間のデータ型のマッピング
表A-1に新しいC APIにおけるデータ型の変更の概略を示します。
表A-1 oraxmlパッケージとxmlパッケージでサポートされるデータ型
| oraxmlでサポートされるデータ型 | xmlでサポートされるデータ型 | 
|---|---|
| uword | xmlerr | 
| xmlacctype | xmlurlacc | 
| xmlattrnode | xmlattrnode | 
| xmlcdatanode | xmlcdatanode | 
| xmlcommentnode | xmlcommentnode | 
| xmlctx | xmlctx | 
| xmldocnode | xmldocnode | 
| xmldomimp | 廃止。 | 
| xmldtdnode | xmldtdnode | 
| xmlelemnode | xmlelemnode | 
| xmlentnode | xmlentnode | 
| xmlentrefnode | xmlentrefnode | 
| xmlflags | ub4 | 
| xmlfragnode | xmlfragnode | 
| xmlihdl | xmlurlhdl | 
| xmlmemcb | 個々の関数ポインタを使用 | 
| xmlnode | xmlnode | 
| xmlnodes | xmlnodelist, xmlnamedmap | 
| xmlnotenode | xmlnotenode | 
| xmlntype | xmlnodetype | 
| xmlpflags | ub4 | 
| xmlpinode | xmlpinode | 
| xmlsaxcb | xmlsaxcb | 
| xmlstream | xmlistream, xmliostream | 
| xmltextnode | xmltextnode | 
| xpctx | xpctx | 
| xpexpr | xpexpr | 
| xpnset | 廃止。 | 
| xpnsetele | 廃止。Use | 
| xpobj | xpobj | 
| xpobjtyp | xmlxslobjtype | 
| xslctx | xslctx | 
| xsloutputmethod | xmlxsloutputmethod | 
A.4 oraxmlパッケージとxmlパッケージのメソッドのマッピング
表A-2に新しいC APIにおけるメソッドの変更の概略を示します。
表A-2 oraxmlパッケージとxmlパッケージのメソッド
| パッケージoraxmlのメソッド | パッケージxmlのメソッド | 
|---|---|
| appendChild() | XmlDomAppendChild() | 
| appendData() | XmlDomAppendData() | 
| cloneNode() | XmlDomCloneNode() | 
| createAttribute() | XmlDomCreateAttr() | 
| createAttributeNS() | XmlDomCreateAttrNS() | 
| createCDATASection() | XmlDomCreateCDATA() | 
| createComment() | XmlDomCreateComment() | 
| createDocument() | XmlCreateDocument() | 
| createDocumentFragment() | XmlDomCreateFragment() | 
| createDocumentNS() | XmlCreateDocument() | 
| createDocumentType() | XmlCreateDTD() | 
| createElement() | XmlDomCreateElem() | 
| createElementNS() | XmlDomCreateElemNS() | 
| createEntityReference() | XmlDomCreateEntityRef() | 
| createProcessingInstruction() | XmlDomCreatePI() | 
| createTextNode() | XmlDomCreateText() | 
| deleteData() | XmlDomDeleteData() | 
| freeElements() | XmlDomFreeNodeList() | 
| getAttribute() | XmlDomGetAttr() | 
| getAttributeIndex() | XmlDomGetAttrs(), XmlDomGetNodeMapItem() | 
| getAttributeNode() | XmlDomGetAttrNode() | 
| getAttributes() | XmlDomGetAttrs() | 
| getAttrLocal() | XmlDomGetAttrLocal(), XmlDomGetAttrLocalLen() | 
| getAttrName() | XmlDomGetAttrName() | 
| getAttrNamespace() | XmlDomGetAttrURI(), XmlDomGetAttrURILen() | 
| getAttrPrefix() | XmlDomGetAttrPrefix() | 
| getAttrQualifiedName() | XmlDomGetAttrName() | 
| getAttrSpecified() | XmlDomGetAttrSpecified() | 
| getAttrValue() | XmlDomGetAttrValue() | 
| getCharData() | XmlDomGetCharData() | 
| getChildNode() | XmlDomGetChildNode() | 
| getChildNodes() | XmlDomGetChildNodes() | 
| getContentModel() | XmlDomGetContentModel() | 
| getDocType() | XmlDomGetDTD() | 
| getDocTypeEntities() | XmlDomGetDTDEntities() | 
| getDocTypeName() | XmlDomGetDTDName() | 
| getDocTypeNotations() | XmlDomGetDTDNotations() | 
| getDocument() | 廃止。ドキュメントを取得するには、 | 
| getDocumentElement() | XmlDomGetDoctElem() | 
| getElementByID() | XmlDomGetElemByID() | 
| getElementsByTagName() | XmlDomGetElemsByTag() | 
| getElementsByTagNameNS() | XmlDomGetElemsByTag() | 
| getEncoding() | XmlDomGetEncoding() | 
| getEntityNotation() | XmlDomGetEntityNotation() | 
| getEntityPubID() | XmlDomGetEntityPubID() | 
| getEntitySysID() | XmlDomGetEntitySysID() | 
| getFirstChild() | XmlDomGetFirstChild() | 
| getImplementation() | 廃止。 | 
| getLastChild() | XmlDomGetLastChild() | 
| getNamedItem() | XmlDomGetNamedItem() | 
| getNextSibling() | XmlDomGetNextSibling() | 
| getNodeLocal() | XmlDomGetNodeLocal(), XmlDomGetNodeLocalLen() | 
| getNodeMapLength() | XmlDomGetNodeMapLength() | 
| getNodeName() | XmlDomGetNodeName(), XmlDomGetNodeNameLen() | 
| getNodeNameSpace() | XmlDomGetNodeURI(), XmlDomGetNodeURILen() | 
| getNodePrefix() | XmlDomGetNodePrefix() | 
| getNodeQualifiedName() | XmlDomGetNodedName(), XmlDomGetNodedNameLen() | 
| getNodeType() | XmlDomGetNodeType() | 
| getNodeValue() | XmlDomGetNodeValue(), XmlDomGetNodeValueLen() | 
| getNotationPubID() | XmlDomGetNotationPubID() | 
| getNotationSysID() | XmlDomGetNotationSysID() | 
| getOwnerDocument() | XmlDomGetOwnerDocument() | 
| getParentNode() | XmlDomGetParentNode() | 
| getPIData() | XmlDomGetPIData() | 
| getPITarget() | XmlDomGetPITarget() | 
| getPreviousSibling() | XmlDomGetPrevSibling() | 
| getTagName() | XmlDomGetTagName() | 
| hasAttributes() | XmlDomHasAttrs() | 
| hasChildNodes() | XmlDomHasChildNodes() | 
| hasFeature() | XmlHasFeature() | 
| importNode() | XmlDomImportNode() | 
| insertBefore() | XmlDomInsertBefore() | 
| insertData() | XmlDomInsertData() | 
| isSingleChar() | XmlIsSimple() | 
| isStandalone() | XmlDomGetDecl() | 
| isUnicode() | XmlDomIsUnicode() | 
| nodeValid() | XmlDomValidate() | 
| normalize() | XmlDomNormalize() | 
| numAttributes() | XmlDomNumAttrs() | 
| numChildNodes() | XmlDomNumChildNodes() | 
| prefixToURI() | XmlDomPrefixToURI() | 
| printBuffer() | XmlSaveDomBuffer() | 
| printBufferEnc() | XmlSaveDomBuffer() | 
| printCallback() | XmlSaveDomStream() | 
| printCallbackEnc() | XmlSaveDomStream() | 
| printSize() | XmlSaveDomSize() | 
| printSizeEnc() | XmlSaveDomSize() | 
| printStream() | XmlSaveDomStdio() | 
| printStreamEnc() | XmlSaveDomStdio() | 
| removeAttribute() | XmlDomRemoveAttr() | 
| removeAttributeNode() | XmlDomRemoveAttrNode() | 
| removeChild() | XmlDomRemoveChild() | 
| removeNamedItem() | XmlDomRemoveNamedItem() | 
| replaceChild() | XmlDomReplaceChild() | 
| replaceData() | XmlDomReplaceData() | 
| saveString2() | XmlDomSaveString2() | 
| saveString() | XmlDomSaveString() | 
| setAttribute() | XmlDomSetAttr() | 
| setAttributeNode() | XmlDomSetAttrNode() | 
| setAttrValue() | XmlDomSetAttrValue() | 
| setCharData() | XmlDomSetCharData() | 
| setNamedItem() | XmlDomSetNamedItem() | 
| setNodeValue() | XmlDomSetNodeValue(), XmlDomSetNodeValueLen() | 
| setPIData() | XmlDomSetPIData() | 
| splitText() | XmlDomSplitText() | 
| substringData() | XmlDomSubstringData() | 
| xmlaccess() | XmlAccess() | 
| xmlinit() | XmlCreate() | 
| xmlinitenc() | XmlCreate() | 
| xmlparse() | XmlLoadDomURI() | 
| xmlparsebuf() | XmlLoadDomBuffer() | 
| xmlparsedtd() | 廃止。 | 
| xmlparsefile() | XmlLoadDomFile() | 
| xmlparsestream() | XmlLoadDomStream() | 
| xmlterm() | XmlDestroy() | 
| xpevalxpathexpr() | XmlXPathEval() | 
| xpfreexpathctx() | XmlXPathDeleteCtx() | 
| xpgetbooleanval() | XmlXPathGetObjectBoolean() | 
| xpgetfirstnsetelem() | XmlXPathGetObjectNSetNum() | 
| xpgetnextnsetelem() | XmlXPathGetObjectNSetNum() | 
| xpgetnsetelemnode() | XmlXPathGetObjectNSetNum() | 
| xpgetnsetval() | XmlXPathGetObjectNSetNum() | 
| xpgetnumval() | XmlXPathGetObjectNumber() | 
| xpgetrtfragval() | XmlXPathGetObjectFragment() | 
| xpgetstrval() | XmlXPathGetObjectString() | 
| xpgetxpobjtyp() | XmlXPathGetObjectType() | 
| xpmakexpathctx() | XmlXPathCreateCtx() | 
| xpparsexpathexpr() | XmlXPathParse() | 
| xslgetbaseuri() | XmlXslGetBaseURI() | 
| xslgetoutputdomctx() | XmlXslGetOutputDom() | 
| xslgetoutputsax() | 不要 | 
| xslgetoutputstream() | 不要 | 
| xslgetresultdocfrag() | XmlXslGetOutputFragment() | 
| xslgettextparam() | XmlXslGetTextParam() | 
| xslgetxslctx() | 不要 | 
| xslinit() | XmlXslCreateCtx() | 
| xslprocess() | XmlXslProcess() | 
| xslprocessex() | XmlXslProcess() | 
| xslprocessxml() | XmlXslProcess() | 
| xslprocessxmldocfrag() | XmlXslProcess() | 
| xslresetallparams() | XmlXslResetAllParams() | 
| xslsetoutputdomctx() | XmlXslSetOutputDom() | 
| xslsetoutputencoding() | XmlXslSetOutputEncoding() | 
| xslsetoutputmethod() | XmlXslSetOutputMethod() | 
| xslsetoutputsax() | XmlXslSetOutputSax() | 
| xslsetoutputsaxctx() | XmlXslSetOutputSax() | 
| xslsetoutputstream() | XmlXslSetOutputStream() | 
| xslsettextparam() | XmlXslSetTextParam() | 
| xslterm() | XmlXslDeleteCtx() |