Number of elements in XML file
Hi,
I have an xml file as follows
<xml>
<head>
<h1>xxxx</h1>
</head>
<line>
<name>ravi</name>
<dept>Oracle</dept>
</line>
<line>
<name>Kamal</name>
<dept>Java</dept>
</line>
<line>
<name>Ajay</name>
<dept>Linux</dept>
</line>
</xml>
I need to insert the above xml file into a table.
For that i have used the following query.
insert into dest_table
SELECT EXTRACTVALUE (t2.xml_doc, '/xml/head/h1') head,
EXTRACTVALUE (t2.xml_doc, '/xml/line['||level||']/name') name,
EXTRACTVALUE (t2.xml_doc, '/xml/line['||level||']/dept')dept
FROM xml_table t2
CONNECT BY LEVEL <= n
Here n in CONNECT BY clause is the number "<line>" elements (3 in the above example).
If i know the number of <LINE> elements,then i can easily select and insert the xml data.
BUT How to know the number of particular elements(<line> in above xml) in the above xml using oracle xml oracle.
any idea psl.
cheers
RRK
select count(1) from table(
xmlsequence(
extract(
XMLType('<root><a>b</a><a>c</a><a>d</a><x>z</x></root>'),
'/root/a'
)
Similar Messages
-
How to check the element in xml file by xpath
hi all,
* How to check the element in xml file by xpath
for the following XML file,
* I want to check whether
the element (sage) is present or not in the following xml file XPATH expression...
* I have tried by the following expression ,
NodeList result = (NodeList) xpath.evaluate("//*:student/*:sage/text()",xml_dom,XPathConstants.STRING);
System.out.println(result.item(0).getLocalName()); * I want to get the Element sage as String value....
but i am not able to get the element,why that ??? and How to do that ???
MyXML File :
<x:student>
<x:sname>aaa</x:sname>
<x:sage>26</x:sage>
</x:student>
Thanks,
JavaImran<code>* Thanks for reply....
* </code><code>In </code>
<code>x:student element x represents the namespace...thats why i put *:student in my expression....
"//*[local-name() = 'student']/*[local-name() = 'sage']/text()"* By the above code , i am not able to get the sage as string from
</code> resul.item(0).getLocalName() method.......?
* How to get that as string format ? -
Delete elements from XML file using DOM and java
Hi
I want now is to remove element from my XML file
for example
i have following xml
<?xml version="1.0" encoding="UTF-8"?>
<printing>
<firstLineTexts>
<firstLineText />
<firstLineText>|line11</firstLineText>
<firstLineText>|line12</firstLineText>
</firstLineTexts>
</printing>how do i remove all elements fireLineText
my final output should be
<?xml version="1.0" encoding="UTF-8"?>
<printing>
<firstLineTexts>
</firstLineTexts>
</printing>How do i do it using DOM,
I can create instance of DOM and write it using TransformerFactory
AshishHi
I am trying the following code,
but it is not working
NodeList nScene = doc.getElementsByTagName("firstLineTexts");
NodeList nScene1 = nScene.item(0).getChildNodes();
for (int i = 0; i < nScene1.getLength(); i++)
Node n = nScene1.item(i);
nScene.item(0).removeChild(n);
} -
How to add attribute to the elements in XML file in BPEL transformation
Hi All-
I have to create a XML file using transformation and file adapater and the parent element is USERRECORDS, now when I am creating the XML file using transformation the XML get creates like
<?xml version="1.0">
<USERRECORDS>
so on
But I want the parent element and the xml version tags as:
<?xml version="1.0" encoding="UTF-8"?>
<USERRECORDS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mySchema.xsd">
as I need to add the attributes.
Is it possible in transformation?
Any idea, please suggest.
Thanks and Regards,
SreejitI have never come across any functionality like that.
However I assigned values to attributes in Assign Acitivity using XML Fragment on source side. -
Number of elements in TDMS file
Is there a way to determine the number of elements in a TDMS file? The files I am creating have several signals all of the same length. The only way I can think of is to do this is put it in a loop and read one element at a time until it reaches the end of the file. But, my files will have millions of elements. Any suggestions?
Thanks.
--RobertThanks Herbert
For readers having similar problems, here are my experiences:
It works either without wiring a property name and datatype, as you mentionned before.
Resulting is a variant array. Result see attached solutionVariant.jpg
It also works wiring the right datatype as in the TDMS File Viewer and your first explanations:
Resulting is the channel length as Integer I64 or U64. Datatype constant representation and indicator representation must match!
See attached solution.jpg
My error has been wiring a string "I64" as datatype and a string indicator as value indicator. So stupid...
Regards
Klaus
Attachments:
solutionVariant.jpg 30 KB
solution.jpg 8 KB -
How to hide elements from xml file when dumping to JTree?
Hi everybody,
I got a XML file similar to this one:
<Dios>
<Adan>
<Hijos>
<Vivos>
<Nombre>Isaac</Nombre>
<ColorOjos>Verdes</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
<Nombre>Paris</Nombre>
<ColorOjos>Verdes</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
</Vivos>
</Hijos>
</Adan>
<Eva>
<Hijos>
<Vivos>
<Nombre>Jose</Nombre>
<ColorOjos>Azules</ColorOjos>
<ColorPelo>Rubio</ColorPelo>
<Nombre>Marta</Nombre>
<ColorOjos>Oscuros</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
</Vivos>
<Fallecidos>
<Nombre>Miriam</Nombre>
<ColorOjos>Verdes</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
<Nombre>Dorian</Nombre>
<ColorOjos>Azules</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
</Fallecidos>
</Hijos>
</Eva>
</Dios>
I must:
1)Show datas on a Tree, with the exception that "ColorPelo" and "ColorOjos" values should not be displayed on the tree.
2)When clicking over one leaf (for example: Miriam) on the right side of panel, should write the values of "ColorPelo" and "ColorOjos", verdes and casta�o.
Don�t know where start. Any idea will be welcome
Thanks in advanceSorry, the xml above was wrong, this is right xml:
<Dios>
<Adan>
<Hijos>
<Vivos>
<Nombre>Isaac</Nombre>
<Caracteristicas>
<ColorOjos>Verdes</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
</Caracteristicas>
<Nombre>Paris</Nombre>
<Caracteristicas>
<ColorOjos>Verdes</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
</Caracteristicas>
</Vivos>
</Hijos>
</Adan>
<Eva>
<Hijos>
<Vivos>
<Nombre>Jose</Nombre>
<Caracteristicas>
<ColorOjos>Azules</ColorOjos>
<ColorPelo>Rubio</ColorPelo>
</Caracteristicas>
<Nombre>Marta</Nombre>
<Caracteristicas>
<ColorOjos>Oscuros</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
</Caracteristicas>
</Vivos>
<Fallecidos>
<Nombre>Miriam</Nombre>
<Caracteristicas>
<ColorOjos>Verdes</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
</Caracteristicas>
<Nombre>Dorian</Nombre>
<Caracteristicas>
<ColorOjos>Azules</ColorOjos>
<ColorPelo>Casta�o</ColorPelo>
</Caracteristicas>
</Fallecidos>
</Hijos>Finally I know how to do first point, when creating the nodes(recursively):
if( (children != null )&& *!root.getNodeName().equals("Caracteristicas")*)
numChildren = children.getLength();
for (int i=0; i < numChildren; i++)
node = children.item(i);
if( node != null && *!node.getNodeName().equals("Caracteristicas")*)
... -
Invalid tag generated in result XML file, xslt mapping done using MAPFORCE
HI
My requirement is File to File using xslt mapping
I have done a very simple XSLT mapping, but through MAPFORCE tool
Here are the steps, I followed:
1. Supplied source xsd and xml file to MAPFORCE
2. Supplied target xsd file
3. mapped it as required
4. tested by supplying a sample xml file by clicking OUTPUT button, which displays perfect XML structure
5. Clicked XSLT button and copied and created a new file with extension .xsl file
6. Zipped the above xsl file
7. imported into IR imported archives folder
8. Selected the above xslt mapping in my Interface mapping.
9. Now tested my Interface Mapping by supplying sample some data for the source structure.
Now I got the error or warning "XML not well-formed" and got the successfull completion message window for my mapping when I proceed.
Now when I clicked xml source button for the target structure, It displays the invalid tag and starting with "#default"
So If I removed this particular tag at the first and last lines, it becomes a valid xml structure and able to see properly in my internet explorer
Here is the result I am getting:
<?xml version="1.0" encoding="UTF-8"?>
<#default:MT_Student_Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:xsltMappingScenarios C:/DOCUME~1/Satya/Desktop/MT_Student_Result.xsd">
<Data>
<Name>Khan Raj</Name>
<Marks>
<Total_Marks>166</Total_Marks>
</Marks>
</Data>
</#default:MT_Student_Result>
When I tested through MAPFORCE it generates absolutely valid XML structure when I clicked OUTPUT button on MAPFORCE, but not when I used the xslt mapping through my interface mapping.
What is the error I am making or any step missing?
Please help me!
Edited by: Shilpa Shetty on Oct 9, 2008 4:17 AM
Edited by: Shilpa Shetty on Oct 9, 2008 5:58 AM
Edited by: Chris Rock on Oct 9, 2008 6:06 AMFor some reason when I use MapForce tool to generate my xslt mapping source, it is generating the following statement in the xsl file.
<xsl:namespace-alias stylesheet-prefix="n" result-prefix="#default"/>
So at the root element of XML file, it is replacing the character n with '#default' for some reason, I don;t know the purpose of this.
As you suggested, I changed the name space, still I experienced same problem.
It is now resolved after removing the above xsl statement from the xsl file before creating/uploading the relevant zip file into archives folder.
It works fine now. Thanks for the clue. -
CS4-JS : Read XML file and getting Attributes
Dear All,
How to get the Attributes based on the RootElements.
For Example:
//========================== XML File : Start ================================//
<stag>
<cust>
<custname>120</custname>
<atagst name="alpha" attributename="1" attributevalue="2" sty="First"/>
<atagst name="beta" attributename="1" attributevalue="5" sty="Second"/>
<atagst name="gama" attributename="1" attributevalue="2" sty="Third"/>
<atagst name="theta" attributename="1" attributevalue="5" sty="Fourth"/>
<cust>
<cust>
<custname>121</custname>
<atagst name="A.alpha" attributename="1" attributevalue="2" sty="First"/>
<atagst name="A.beta" attributename="1" attributevalue="5" sty="Second"/>
<atagst name="A.gama" attributename="1" attributevalue="2" sty="Third"/>
<atagst name="A.theta" attributename="1" attributevalue="5" sty="Fourth"/>
<cust>
<cust>
<custname>122</custname>
<atagst name="B.alpha" attributename="1" attributevalue="2" sty="First"/>
<atagst name="Bbeta" attributename="1" attributevalue="5" sty="Second"/>
<atagst name="B.gama" attributename="1" attributevalue="2" sty="Third"/>
<atagst name="B.theta" attributename="1" attributevalue="5" sty="Fourth"/>
<cust>
</stag>
//========================== XML File : End ================================//
Here I want to check through Java Script Code [InDesign]
//======================== Script : Starts ====================================//
var myEveryName = new Array();
traverse(roots);
for(var Element_name=0; Element_name<myEveryName.length; Element_name++)
if(myEveryName[Element_name] == "customername")
custname.push(myEveryContent[Element_name]);
if(myEveryName[Element_name] == "applytagstyle")
Aname.push(myEveryAttributes[Element_name][0]);
Aattributename.push(myEveryAttributes[Element_name][1]);
Aattributevalue.push(myEveryAttributes[Element_name][2]);
Asty.push(myEveryAttributes[Element_name][3]);
function traverse(tree) {
myEveryName.push(tree.name());
if(tree.elements().length() > 0) {
for(var i=0; i<tree.elements().length(); i++) {
traverse(tree.elements()[i]);
//======================== XML File : End ====================================//
Everything working fine, but I couldn't get attribute values. Please check the below example
For Example:
If you check first root element in above xml code
i need the output like
custname=120
name=alpha,beta,gama,theta
attributename=1,1,1,1
attributevalue=2,5,2,5
sty=first,second,third,fourth
custname=121
Please any one can help me and give me the solutions.
Thanks & Regards
T.R.Harihara SudhaNFew questions:
1. Your XML is not well formed.
2. Secondly, I do not see any relation of XML with script. For instance, I do see any elements "customername", "applytagstyle" in input.
3. Either you have not provided the complete source or either your dummy XML is incorrect.
Anyways, having a quick look, I guess you are trying to get specific attributes values from XML tree. I will try to give you a kick start though you will be required to customized the script as per requirement (for instance rearranging the attribute values in array and so forth). Otherwise please try to post complete inputs.
#include "glue code.jsx"
//Get the attribute values of all elements
main();
function main(){
if (app.documents.length != 0){
var myDoc = app.activeDocument;
var myRuleSet = new Array (
new findObjAttribute("//*")
with(myDoc){
var elements = xmlElements;
__processRuleSet(elements.item(0), myRuleSet);
else{
alert("You have no document open!");
exit();
function findObjAttribute(XPATH){
this.name = "findObjAttribute";
this.xpath = XPATH;
this.apply = function(myElement, myRuleProcessor)
var elmName=myElement.markupTag.name;
with(myElement){
try {
var Name=myElement.xmlAttributes.itemByName("name").value;
var AttName=myElement.xmlAttributes.itemByName("attributename").value;
var AttValue=myElement.xmlAttributes.itemByName("attributevalue").value;
var AttSty=myElement.xmlAttributes.itemByName("sty").value;
$.writeln("Name: "+Name);
$.writeln("AttributeName: "+AttName);
$.writeln("AttributeValue: "+AttValue);
$.writeln("Sty: "+AttSty);
} catch(e){};
return true;
This will just print the values JavaScript console.
HTH,
Pankaj Chaturvedi -
How to map XML file to various of object in the RFC
hello
I recieve XML file (not devided to elements, but XML file)'
and I would like to map it to a RFC that has various object.
I there a way to do it?
if it involve a java code, does any one has a written code example?
THX
Kfirthanks for the reply
my source XML response will be looking something like this (it will be reponsed in a long string):
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<status>
<retCode>00</retCode>
<retCodeDesc>OK</retCodeDesc>
<rRobjectId>09002347802d2981</rRobjectId>
<rFileSize>7</rFileSize>
<rTotalPages>1</rTotalPages>
</status>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
my RFC is:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:sap-com:document:sap:rfc:functions" targetNamespace="urn:sap-com:document:sap:rfc:functions">
<xsd:element name="ZRFC_SET_DOCUMENT.Response">
<xsd:complexType>
<xsd:all>
<xsd:element name="RETCODE" type="xsd:string" minOccurs="0" />
<xsd:element name="RETCODEDESC" type="xsd:string" minOccurs="0" />
<xsd:element name="RFILESIZE" type="xsd:string" minOccurs="0" />
<xsd:element name="RROJECTID" type="xsd:string" minOccurs="0" />
<xsd:element name="RTOTALPAGES" type="xsd:string" minOccurs="0" />
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema> -
SAX and XML file, how to?
Hi,
I'm going to use JAXP and SAX to read my application XML config file.
But I'm lost, I don't know how to read the elements.
How does it function, do I have to put in the startElement() method as many "if" as entitys I need to process?
And how can I guess if an element belongs (is inside) one element or another?
Example:
<program>
<printer id="xx" type="aa">
<path> /aa/cc </path>
</printer>
<source>
<path> /aa/bb </path>
</source>
</program>
for this XML, how would you code it? this way?
startElement (String uri, String localName, String qName, Attributes attributes) {
if (localname.equals("printer")) {
//get printer attributes
} else if (localname.equals("source")) {
//get source attributes
thanks!i have one sample code through which u can read the elements from xml file.
// File SaxLister.java
import java.io.IOException;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
public class SAXLister {
public static void main(String[] args) throws Exception
new SAXLister(args);
public SAXLister(String[] args) throws SAXException, IOException
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
// should load properties rather than hardcoding class name
parser.setContentHandler(new PeopleHandler( ));
parser.parse(args.length == 1 ? args[0] : "parents.xml");
/** Inner class provides DocumentHandler
class PeopleHandler extends DefaultHandler
boolean parent = false;
boolean kids = false;
public void startElement(String nsURI, String localName,
String rawName, Attributes attributes) throws SAXException {
// System.out.println("docEvents" + "startElement: " + localName + ","
// + rawName);
// Consult rawName since we aren't using xmlns prefixes here.
if (rawName.equalsIgnoreCase("name"))
parent = true;
if (rawName.equalsIgnoreCase("children"))
kids = true;
public void characters(char[] ch, int start, int length) {
if (parent) {
System.out.println("Parent: " + new String(ch, start, length));
parent = false;
} else if (kids) {
System.out.println("Children: " + new String(ch, start, length));
kids = false;
/** Needed for parent constructor */
public PeopleHandler( ) throws org.xml.sax.SAXException {
super( );
// File people.xml
<?xml version="1.0"?>
<people>
<person>
<name>Ian Darwin</name>
<email>http://www.darwinsys.com/</email>
<country>Canada</country>
</person>
<person>
<name>Another Darwin</name>
<email type="intranet">afd@node1</email>
<country>Canada</country>
</person>
</people>
I hope this gives u a better understanding of how SAX parser works..
Kindly note u need xml.jar and xerces.jar in ur classpath to run above program.
Regards,
Nikunj -
Loading data held in separate XML files
I think I am probably just having a slow brain day, but I have a requirement that I can't think of a neat solution for.
We will be receiving a number (200-400 ish) xml files twice a day. These files will have a standard naming structure - 850xxxx_ATT_850LLLL_zzz.xml
xxx will be a 4 digit school number - we will get a file for each school twice a day and yyy is a numeric identifier. The identifiers won't necessarily be consecutive for a particular school, they will in general be increasing, but they will wrap around eventually (only a 3 digit number)
I want to merge all of the data into a table, twice a day, the details for an existing row can be updated and new ones inserted. Once I have the data in oracle I can then process it however I like, I'm comfortable with that bit. It's loading the data I'm not sure about
database version is
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for 32-bit Windows: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
running on Windows Server 2003
I'd prefer a mainly oracle based solution if possible. Otherwise I could just loop through the files programatically, strip the data out via XPATH or using some sort of DOM and then do a series of insert/updates. Getting messy though and I would prefer to keep the loading of the data with the processing of the data.
Any suggestions? A gentle Nudge in the right direction should do it - I'm happy to work out the details (Which is why I haven't gone into the details of the XML or the data)
Regards,
CarlCarlovski wrote:
1 - It's going to have to be a process scripted outside of the database (Although I guess i could use DBMS_SCHEDULER to kick off the SQL Load command?)You can schedule sqlloader initialization by using windows scheduler, which would then execute some *.bat script with sqlloader commands.
2- how will this handle the multiple file names? Doesn't the control file need to specify the source of the file? Would I need to dynamically generate control files?Sqlloader can load multiple files using one control file.
Example is Re: sql loader multiple files
Generating control file dynamically can be done in several ways, depending on the os and tools you have.
One example is here. -
Transfer of xml file elements to data base columns
hi all,
i have to store xml file's data(element values) into the data base(table columns).
i heard that we can acheive this by XSU.
IS it is mediator between xml and db? if yes how to install it.
i tried something as below
with t as (
select xmltype('<Message-Header>
<Message-Id>1234</Message-Id>
<Sender-Company-ID>4569</Sender-Company-ID>
<Sender-Company-Name>abc company</Sender-Company-Nam
<Sender-User-ID>AA</Sender-User-ID>
<Recv-Company-ID>050</Recv-Company-ID>
<Recv-Company-Name>XYZ pvt.ltd</Recv-Company-Name>
<Creation-Time>20101019 15:59:39</Creation-Time>
</Message-Header>') as xml from dual
)but i am getting following error. can anybody explain about this
SQL> ed
Wrote file afiedt.buf
1 with t as (
2 select xmltype('<Message-Header>
3 <Message-Id>1234</Message-Id>
4 <Sender-Company-ID>4569</Sender-Company-ID>
5 <Sender-Company-Name>abc company</Sender-Company-Name>
6 <Sender-User-ID>AA</Sender-User-ID>
7 <Recv-Company-ID>050</Recv-Company-ID>
8 <Recv-Company-Name>XYZ pvt.ltd</Recv-Company-Name>
9 <Creation-Time>20101019 15:59:39</Creation-Time>
10 </Message-Header>') as xml from dual
11* )
SQL> /
with t as (
ERROR at line 1:
ORA-01041: internal error. hostdef extension doesn't existPlease help me..
my db version is Oracle Database 10g Release 10.2.0.1.0 - ProductionHi,
What are you trying to achieve with a single WITH clause and no SELECT?
Please see this from the documentation if you want to use it properly :
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2077142
Apart from its true purpose of subquery factoring, the WITH clause is often use here and there to simulate a table content, but you'll always need a SELECT.
Maybe that's what you were trying to do?
As for your question, starting with release 10.2, Oracle provides XMLTable to shred XML documents into relational structures.
For example,
with t as (
select xmltype('<Message-Header>
<Message-Id>1234</Message-Id>
<Sender-Company-ID>4569</Sender-Company-ID>
<Sender-Company-Name>abc company</Sender-Company-Name>
<Sender-User-ID>AA</Sender-User-ID>
<Recv-Company-ID>050</Recv-Company-ID>
<Recv-Company-Name>XYZ pvt.ltd</Recv-Company-Name>
<Creation-Time>20101019 15:59:39</Creation-Time>
</Message-Header>') as xml from dual
select x.*
from t,
XMLTable(
'/Message-Header'
passing t.xml
columns
message_id number path 'Message-Id',
sender_company_id number path 'Sender-Company-ID',
sender_company_name varchar2(30) path 'Sender-Company-Name',
sender_user_id varchar2(30) path 'Sender-User-ID',
recv_company_id varchar2(30) path 'Recv-Company-ID',
recv_company_name varchar2(30) path 'Recv-Company-Name',
creation_time varchar2(30) path 'Creation-Time'
) x
;If you're working in PL/SQL, and the XML resides in a variable, you can directly do (with necessary datatype conversion in the SELECT) :
insert into your_table ( <your_columns_list> )
select <your_columns_list>
from XMLTable(
'/Message-Header'
passing your_xml_var
columns
message_id number path 'Message-Id',
sender_company_id number path 'Sender-Company-ID',
sender_company_name varchar2(30) path 'Sender-Company-Name',
sender_user_id varchar2(30) path 'Sender-User-ID',
recv_company_id varchar2(30) path 'Recv-Company-ID',
recv_company_name varchar2(30) path 'Recv-Company-Name',
creation_time varchar2(30) path 'Creation-Time'
) x
; -
XML file too large or XML element too large
I am attempting to import an xml file into the repository and have it shred into the object-relational tables. I registered a schema and it created object-relational xml_tables, triggers, and types. The full xml file is > 80MB. XDB created all the fields as VARCHAR2(4000).
error code when importing the full XML file. This is what I need to ultimately fix.
DECLARE
res BOOLEAN;
BEGIN
res := DBMS_XDB.createResource('/home/pharma/drugbank.xml',
bfilename('XMLPHARMA', 'drugbank.xml'),
nls_charset_id('AL32UTF8'));
END;
COMMIT;
XML file encounters errors on the import.
An error was encountered performing the requested operation
ORA-30951: Element or attribute at Xpath references exceeds maximum length
ORA-06512 at "XDB.DBMS_XDB", line 315
ORA-06512 at line 4
30951.00000 - "Element or attribute at Xpath %x exceeds maximum length"
*Cause: An attempt was made to insert a node of length exceeding the maximum length (specified by the maxLength facet) into an XML document.
*Action: Do not attempt to add a node exceeding the maximum length to XML documents.
Vendor code 30951Error at Line:18I would guess that some of the fields have max lengths > 4000. I plan to annotate the schema with SQLType="CLOB", but need to know which fields to change. I was able to copy the xml file and reduce that xml file to one record, which imported into the tables. My plan was to write a view over the bfile to get the lengths of certain fields, annotate the .xsd with CLOBS where needed, and then import again. In order to do that, I have a 1 record file imported into a table and as a bfile.
Here is my code selecting length from a generated object-relational table of only one record.
CREATE OR REPLACE VIEW pharma.drugs_vw AS
SELECT d.*
FROM drugs, XMLTABLE
('/drugs' PASSING OBJECT_VALUE COLUMNS
drugbank_id VARCHAR2(20) PATH 'drug/drugbank-id',
name VARCHAR2(50) PATH 'drug/name',
description VARCHAR2(4000) PATH 'drug/description'
) d
select max(length(drugbank_id)) as dbidlen,
max(length(name)) as nmlen,
max(length(description)) as desclen
from drugs_vw;
DBIDLEN NMLEN DESCLEN
7 9 229
1 row selected.Here is the code for the bfile. Same results, but using deprecated functions. I read the whitepaper, Oracle XML DB: Best practices to get optimal performance out of XML Queries. It says that extract(), extractvalue(), Table(XMLSequence()), and XMLType() are deprecated in 11gr2.
-- Note extractvalue is deprecated in 11gr2 replaced by W3C standard
-- XMLCast(XMLQuery())
-- TABLE(XMLSequence) is replaced by XMLTable
-- XMLType() is replaced by XMLParse()
SELECT max(length(extractvalue(column_value, '/drug/drugbank-id'))) dbidlen,
max(length(extractvalue(column_value, '/drug/name'))) nmlen,
max(length(extractvalue(column_value, '/drug/description'))) desclen
FROM TABLE(XMLSequence(XMLTYPE(bfilename('XMLPHARMA',
'db00001.xml'),nls_charset_id('AL32UTF8')).extract('/drugs/drug'))) d
WHERE ROWNUM <= 5;
DBIDLEN NMLEN DESCLEN
7 9 229Is this better code for getting the maximum length of xml fields from a bfile? Here is what I have so far. This works on a single drugbank-id.
SELECT max(length(drugbank_id)) AS dbidlen,
max(length(name)) AS nmlen,
max(length(description)) AS desclen
FROM (XMLTABLE('*'
PASSING (XMLType(bfilename('XMLPHARMA', 'db00001.xml'),nls_charset_id('AL32UTF8')))
COLUMNS
drugbank_id VARCHAR2(20) PATH 'drug/drugbank-id',
name VARCHAR2(50) PATH 'drug/name',
description VARCHAR2(4000) PATH 'drug/description'
);I try to run it on the full file and get this error
Error report:
SQL Error: ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00007: unexpected end-of-file encountered
31011. 00000 - "XML parsing failed"
*Cause: XML parser returned an error while trying to parse the document.
*Action: Check if the document to be parsed is valid.The code to create schema and object-relational tables. This worked fine.
set serveroutput on
-- Create resource file for schema
DECLARE
res BOOLEAN;
BEGIN
res := DBMS_XDB.createResource('/home/pharma/drugbank.xsd',
bfilename('XMLPHARMA', 'drugbank.xsd'),
nls_charset_id('AL32UTF8'));
COMMIT;
END;
-- optional debugging of create types and tables if you want a trace
ALTER SESSION SET EVENTS = '31098 TRACE NAME CONTEXT FOREVER';
BEGIN
DBMS_XMLSCHEMA.registerSchema(
SCHEMAURL => 'http://localhost:8080/home/pharma/drugbank.xsd',
SCHEMADOC => bfilename('XMLPHARMA', 'drugbank.xsd'),
CSID => nls_charset_id('AL32UTF8'),
LOCAL => TRUE,
GENTYPES => TRUE,
GENTABLES => TRUE,
OWNER => 'PHARMA');
COMMIT;
END;
SQL> select * from v$version;
BANNER
Oracle Database 11g Release 11.2.0.2.0 - Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for 32-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - ProductionThe xml schema follows. Sorry about the length, but I think I might break something if I snipped it.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xdb="http://xmlns.oracle.com/xdb"
>
<!-- General type definitions -->
<xs:simpleType name="DecimalOrEmptyType">
<xs:union memberTypes="xs:decimal EmptyStringType"/>
</xs:simpleType>
<xs:simpleType name="EmptyStringType">
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
<!-- Element Definitions -->
<!-- Drug secondary accession number definition begins -->
<xs:element name="secondary-accession-numbers" xdb:defaultTable="SECONDARY_ACCESSION_NUMBERS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="secondary-accession-number" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug secondary accession number definition ends -->
<!-- Drug groups definition begins -->
<xs:element name="groups" xdb:defaultTable="GROUPS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="group">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="approved"/>
<xs:enumeration value="illicit"/>
<xs:enumeration value="experimental"/>
<xs:enumeration value="withdrawn"/>
<xs:enumeration value="nutraceutical"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug groups definition ends -->
<!-- Drug taxonomy definition begins -->
<xs:element name="substructure">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="class" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="substructures" xdb:defaultTable="SUBSTRUCTURES">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="substructure"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="taxonomy" xdb:defaultTable="TAXONOMY">
<xs:complexType>
<xs:sequence>
<xs:element name="kingdom" type="xs:string"/>
<xs:element ref="substructures"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug taxonomy definition ends -->
<!-- Drug brands definition begins -->
<xs:element name="brands" xdb:defaultTable="BRANDS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="brand" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug brands definition ends -->
<!-- Drug mixtures definition begins -->
<xs:element name="mixture">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="ingredients" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="mixtures" xdb:defaultTable="MIXTURES">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="mixture"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug mixtures definition ends -->
<!-- Drug packagers definition begins -->
<xs:element name="packager">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="url" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="packagers" xdb:defaultTable="PACKAGERS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="packager"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug packagers definition ends -->
<!-- Drug manufacturers definition begins -->
<xs:element name="manufacturer">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="generic" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="manufacturers" xdb:defaultTable="MANUFACTURERS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="manufacturer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug manufactures definition ends -->
<!-- Drug pricing definition begins -->
<xs:element name="cost">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="currency" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="price">
<xs:complexType>
<xs:sequence>
<xs:element name="description" type="xs:string"/>
<xs:element ref="cost"/>
<xs:element name="unit" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="prices" xdb:defaultTable="PRICES">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug pricing definition ends -->
<!-- Drug categories definition begins -->
<xs:element name="categories" xdb:defaultTable="CATEGORIES">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="category" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug categories definition ends -->
<!-- Drug affected orgainsms definition begins -->
<xs:element name="affected-organisms" xdb:defaultTable="AFFECTED_ORGANISMS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="affected-organism" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug affected organisms definition ends -->
<!-- Drug dosage definition begins -->
<xs:element name="dosage">
<xs:complexType>
<xs:sequence>
<xs:element name="form" type="xs:string"/>
<xs:element name="route" type="xs:string"/>
<xs:element name="strength" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="dosages" xdb:defaultTable="DOSAGES">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="dosage"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug dosages definition ends -->
<!-- Drug ATC codes definition begins -->
<xs:element name="atc-codes" xdb:defaultTable="ATC_CODES">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="atc-code" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug ATC codes definition ends -->
<!-- Drug AHFS codes definition begins -->
<xs:element name="ahfs-codes" xdb:defaultTable="AHFS_CODES">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="ahfs-code" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug AHFS codes definition ends -->
<!-- Drug Patent definition begins -->
<xs:element name="patent">
<xs:complexType>
<xs:sequence>
<xs:element name="number" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="approved" type="xs:string"/>
<xs:element name="expires" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="patents" xdb:defaultTable="PATENTS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="patent"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug patent definition ends -->
<!-- Drug food interactions definition begins -->
<xs:element name="food-interactions" xdb:defaultTable="FOOD_INTERACTIONS">
<xs:complexType>
<xs:sequence>
<xs:element name="food-interaction" type="xs:string" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug food interactions definition ends -->
<!-- Drug drug interactions definition begins -->
<xs:element name="drug-interaction">
<xs:complexType>
<xs:sequence>
<xs:element name="drug" type="xs:integer"/>
<xs:element name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="drug-interactions" xdb:defaultTable="DRUG_INTERACTIONS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="drug-interaction"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug drug interactions definition ends -->
<!-- Drug protein sequences (biotech) definition begins -->
<xs:element name="protein-sequences" xdb:defaultTable="PROTEIN_SEQUENCES">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="protein-sequence" type="SequenceType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug protein sequences (biotech) definition ends-->
<!-- Drug external links definition begins -->
<xs:element name="external-link">
<xs:complexType>
<xs:sequence>
<xs:element name="resource" type="xs:string"/>
<xs:element name="url" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="external-links" xdb:defaultTable="EXTERNAL_LINKS">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element ref="external-link"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug external links definition ends -->
<!-- Drug targets definition begins -->
<xs:element name="targets" xdb:defaultTable="TARGETS">
<xs:complexType>
<xs:sequence>
<xs:element name="target" type="TargetBondType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug targets definition ends -->
<!-- Drug enzymes definition begins -->
<xs:element name="enzymes" xdb:defaultTable="ENZYMES">
<xs:complexType>
<xs:sequence>
<xs:element name="enzyme" type="BondType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug enzmes definition ends -->
<!-- Drug transporters definition begins -->
<xs:element name="transporters" xdb:defaultTable="TRANSPORTERS">
<xs:complexType>
<xs:sequence>
<xs:element name="transporter" type="BondType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug transporters definition ends -->
<!-- Drug carriers definition begins -->
<xs:element name="carriers" xdb:defaultTable="CARRIERS">
<xs:complexType>
<xs:sequence>
<xs:element name="carrier" type="BondType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Drug carriers definition ends -->
<!-- Partner Pfams definition begins -->
<xs:element name="pfam">
<xs:complexType>
<xs:sequence>
<xs:element name="identifier" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="pfams" xdb:defaultTable="PFAMS">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="pfam"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Partner Pfams definition end -->
<!-- Partner GO Classification definition begins -->
<xs:element name="go-classifier">
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="go-classifiers" xdb:defaultTable="GO_CLASSIFIERS">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="go-classifier"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Partner GO Classification definition ends -->
<!-- Partner Essentiality definition begins -->
<xs:element name="essentiality">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Essential"/>
<xs:enumeration value="Non-Essential"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- Partner Essentiality definition ends -->
<!-- Complex Type Definitions -->
<xs:complexType name="SequenceType">
<xs:sequence>
<xs:element name="header" type="xs:string"/>
<xs:element name="chain" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PropertyType">
<xs:sequence>
<xs:element name="kind">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="logP"/>
<xs:enumeration value="logS"/>
<xs:enumeration value="logP/hydrophobicity"/>
<xs:enumeration value="Water Solubility"/>
<xs:enumeration value="caco2 Permeability"/>
<xs:enumeration value="pKa"/>
<xs:enumeration value="IUPAC Name"/>
<xs:enumeration value="Molecular Weight"/>
<xs:enumeration value="Monoisotopic Weight"/>
<xs:enumeration value="SMILES"/>
<xs:enumeration value="Molecular Formula"/>
<xs:enumeration value="InChI"/>
<xs:enumeration value="InChIKey"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="value" type="xs:string"/>
<xs:element name="source">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="JChem"/>
<xs:enumeration value="ALOGPS"/>
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PropertiesType">
<xs:sequence>
<xs:element name="property" type="PropertyType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SynonymsType">
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="synonym" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="IdentifiersType">
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="external-identifier">
<xs:complexType>
<xs:sequence>
<xs:element name="resource" type="xs:string"/>
<xs:element name="identifier" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BondActionsType">
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="action" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BondType">
<xs:sequence>
<xs:element name="actions" type="BondActionsType"/>
<xs:element name="references" type="xs:string"/>
</xs:sequence>
<xs:attribute name="position" type="xs:integer" use="optional"/>
<xs:attribute name="partner" type="xs:integer"/>
</xs:complexType>
<xs:complexType name="TargetBondType">
<xs:complexContent>
<xs:extension base="BondType">
<xs:sequence>
<xs:element name="known-action">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="yes"/>
<xs:enumeration value="no"/>
<xs:enumeration value="unknown"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="PartnerType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="general-function" type="xs:string"/>
<xs:element name="specific-function" type="xs:string"/>
<xs:element name="gene-name" type="xs:string"/>
<xs:element name="locus" type="xs:string"/>
<xs:element name="reaction" type="xs:string"/>
<xs:element name="signals" type="xs:string"/>
<xs:element name="cellular-location" type="xs:string"/>
<xs:element name="transmembrane-regions" type="xs:string"/>
<xs:element name="theoretical-pi" type="DecimalOrEmptyType"/>
<xs:element name="molecular-weight" type="DecimalOrEmptyType"/>
<xs:element name="chromosome" type="xs:string"/>
<xs:element ref="essentiality"/>
<xs:element name="references" type="xs:string"/>
<xs:element name="external-identifiers" type="IdentifiersType"/>
<xs:element name="synonyms" type="SynonymsType"/>
<xs:element name="protein-sequence" type="SequenceType" minOccurs="0"/>
<xs:element name="gene-sequence" type="SequenceType" minOccurs="0"/>
<xs:element ref="pfams"/>
<xs:element ref="go-classifiers"/>
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:complexType>
<xs:complexType name="DrugType">
<xs:sequence>
<xs:element name="drugbank-id" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
<xs:element name="cas-number" type="xs:string"/>
<xs:element name="general-references" type="xs:string"/>
<xs:element name="synthesis-reference" type="xs:string"/>
<xs:element name="indication" type="xs:string"/>
<xs:element name="pharmacology" type="xs:string"/>
<xs:element name="mechanism-of-action" type="xs:string"/>
<xs:element name="toxicity" type="xs:string"/>
<xs:element name="biotransformation" type="xs:string"/>
<xs:element name="absorption" type="xs:string"/>
<xs:element name="half-life" type="xs:string"/>
<xs:element name="protein-binding" type="xs:string"/>
<xs:element name="route-of-elimination" type="xs:string"/>
<xs:element name="volume-of-distribution" type="xs:string"/>
<xs:element name="clearance" type="xs:string"/>
<xs:element ref="secondary-accession-numbers"/>
<xs:element ref="groups"/>
<xs:element ref="taxonomy"/>
<xs:element name="synonyms" type="SynonymsType"/>
<xs:element ref="brands"/>
<xs:element ref="mixtures"/>
<xs:element ref="packagers"/>
<xs:element ref="manufacturers"/>
<xs:element ref="prices"/>
<xs:element ref="categories"/>
<xs:element ref="affected-organisms"/>
<xs:element ref="dosages"/>
<xs:element ref="atc-codes"/>
<xs:element ref="ahfs-codes"/>
<xs:element ref="patents"/>
<xs:element ref="food-interactions"/>
<xs:element ref="drug-interactions"/>
<xs:element ref="protein-sequences" minOccurs="0"/><!-- Only present for biotech drugs -->
<xs:element name="calculated-properties" type="PropertiesType" minOccurs="0"/><!-- Only present for small molecule drugs -->
<xs:element name="experimental-properties" type="PropertiesType"/>
<xs:element name="external-identifiers" type="IdentifiersType"/>
<xs:element ref="external-links"/>
<xs:element ref="targets"/>
<xs:element ref="enzymes"/>
<xs:element ref="transporters"/>
<xs:element ref="carriers"/>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="small molecule"/>
<xs:enumeration value="biotech"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="updated" type="xs:string" use="required"/>
<xs:attribute name="created" type="xs:string" use="required"/>
<xs:attribute name="version" type="xs:decimal" use="required"/>
</xs:complexType>
<xs:element name="drugs" xdb:defaultTable="DRUGS">
<xs:complexType>
<xs:sequence>
<xs:element name="drug" type="DrugType" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="partners">
<xs:complexType>
<xs:sequence>
<xs:element name="partner" type="PartnerType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:keyref name="targetPartnerIdKeyRef" refer="partnerIdKey">
<xs:selector xpath="drug/targets/*"/>
<xs:field xpath="@partner"/>
</xs:keyref>
<xs:keyref name="enzymePartnerIdKeyRef" refer="partnerIdKey">
<xs:selector xpath="drug/enzymes/*"/>
<xs:field xpath="@partner"/>
</xs:keyref>
<xs:keyref name="transporterPartnerIdKeyRef" refer="partnerIdKey">
<xs:selector xpath="drug/transporters/*"/>
<xs:field xpath="@partner"/>
</xs:keyref>
<xs:keyref name="carrierPartnerIdKeyRef" refer="partnerIdKey">
<xs:selector xpath="drug/carriers/*"/>
<xs:field xpath="@partner"/>
</xs:keyref>
<xs:key name="partnerIdKey">
<xs:selector xpath=".//partner"/>
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
</xs:schema>Query optimizing whitepaper
http://www.oracle.com/technetwork/database/features/xmldb/xmlqueryoptimize11gr2-168036.pdfI attempted to insert the xml file into an xml table and into a relational table with an xml column both based on the schema. I get the same errors.
-This creates an XML table based on the schema successfully
CREATE TABLE pharma.drugs_xmltype OF XMLTYPE
XMLSCHEMA "http://localhost:8080/home/pharma/drugbank.xsd"
ELEMENT "drugs";
Table created.
Elapsed: 00:00:02.67
SQL>desc pharma.drugs_xmltype
Name Null? Type
TABLE of SYS.XMLTYPE(XMLSchema "http://localhost:8080/home/pharma/drugbank.xsd" Element "drugs") STORAGE Object-relational TYPE "drugs1200_T"-- it refers to these types
create or replace TYPE "drugs1200_T" AS OBJECT ("SYS_XDBPD$" "XDB"."XDB$RAW_LIST_T","drug" "drug1201_COLL","partners" "partners1202_T")FINAL INSTANTIABLE
create or replace TYPE "drug1201_COLL" AS VARRAY(2147483647) OF "DrugType1121_T"
create or replace TYPE "partners1202_T" AS OBJECT ("SYS_XDBPD$" "XDB"."XDB$RAW_LIST_T","partner" "partner1203_COLL")FINAL INSTANTIABLE
create or replace TYPE "partner1203_COLL" AS VARRAY(2147483647) OF "PartnerType1190_T"
create or replace TYPE "DrugType1121_T" AS OBJECT ("SYS_XDBPD$" "XDB"."XDB$RAW_LIST_T","type" "XDB"."XDB$ENUM_T","updated" VARCHAR2(4000 CHAR),"created" VARCHAR2(4000 CHAR),"version" NUMBER,"drugbank-id" VARCHAR2(4000 CHAR),"name" VARCHAR2(4000 CHAR),"description" VARCHAR2(4000 CHAR),"cas-number" VARCHAR2(4000 CHAR),"general-references" VARCHAR2(4000 CHAR),"synthesis-reference" VARCHAR2(4000 CHAR),"indication" VARCHAR2(4000 CHAR),"pharmacology" VARCHAR2(4000 CHAR),"mechanism-of-action" VARCHAR2(4000 CHAR),"toxicity" VARCHAR2(4000 CHAR),"biotransformation" VARCHAR2(4000 CHAR),"absorption" VARCHAR2(4000 CHAR),"half-life" VARCHAR2(4000 CHAR),"protein-binding" VARCHAR2(4000 CHAR),"route-of-elimination" VARCHAR2(4000 CHAR),"volume-of-distribution" VARCHAR2(4000 CHAR),"clearance" VARCHAR2(4000 CHAR),"secondary-accession-numbers" "secondary-accession1122_T","groups" "groups1124_T","taxonomy" "taxonomy1126_T","synonyms" "SynonymsType1131_T","brands" "brands1132_T","mixtures" "mixtures1133_T","packagers" "packagers1137_T","manufacturers" "manufacturers1141_T","prices" "prices1145_T","categories" "categories1151_T","affected-organisms" "affected-organisms1152_T","dosages" "dosages1153_T","atc-codes" "atc-codes1157_T","ahfs-codes" "ahfs-codes1158_T","patents" "patents1159_T","food-interactions" "food-interactions1163_T","drug-interactions" "drug-interactions1164_T","protein-sequences" "protein-sequences1168_T","calculated-properties" "PropertiesType1171_T","experimental-properties" "PropertiesType1171_T","external-identifiers" "IdentifiersType1174_T","external-links" "external-links1177_T","targets" "targets1181_T","enzymes" "enzymes1186_T","transporters" "transporters1188_T","carriers" "carriers1189_T")NOT FINAL INSTANTIABLE -- drugs type
PHARMA@scidev> desc "drugs1200_T"
Name Null? Type
SYS_XDBPD$ XDB.XDB$RAW_LIST_T
drug drug1201_COLL
partners partners1202_T-- I planned to insert using a subselect and got the same error on the select.
Error starting at line 1 in command:
SELECT max(length(drugbank_id)) AS dbidlen
FROM (XMLTABLE('*'
PASSING (XMLType(bfilename('XMLPHARMA', 'drugbank.xml'),nls_charset_id('AL32UTF8')))
COLUMNS
drugbank_id VARCHAR2(20) PATH 'drug/drugbank-id'
Error report:
SQL Error: ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00007: unexpected end-of-file encountered
31011. 00000 - "XML parsing failed"
*Cause: XML parser returned an error while trying to parse the document.
*Action: Check if the document to be parsed is valid.--This creates a row in the xmltype table from a single drug file.
INSERT INTO drugs_xmltype
VALUES(XMLType(bfilename('XMLPHARMA', 'db00001.xml'),nls_charset_id('AL32UTF8')).CreateSchemaBasedXML(
'http://localhost:8080/home/pharma/drugbank.xsd'))
;-- The create using the full xml file fails.
INSERT INTO drugs_xmltype
VALUES(XMLType(bfilename('XMLPHARMA', 'drugbank.xml'),nls_charset_id('AL32UTF8')).CreateSchemaBasedXML(
'http://localhost:8080/home/pharma/drugbank.xsd'))
VALUES(XMLType(bfilename('XMLPHARMA', 'drugbank.xml'),nls_charset_id('AL32UTF8')).CreateSchemaBasedXML(
ERROR at line 2:
ORA-30951: Element or attribute at Xpath references exceeds maximum length
Elapsed: 00:01:17.90-- Then I tried the same using a relational table with an xml column
-- Then I created a relational table with an xml column
CREATE TABLE pharma.drugs_xmlcolumn_type (drug_xml XMLTYPE)
XMLTYPE COLUMN drug_xml STORE AS OBJECT RELATIONAL
XMLSCHEMA "http://localhost:8080/home/pharma/drugbank.xsd"
ELEMENT "drugs";
CREATE TABLE succeeded.--This command refers to the following types
SYS.XMLTYPE(XMLSchema "http://localhost:8080/home/pharma/drugbank.xsd" Element "drugs" ) STORAGE Object-relational TYPE "drugs1200_T"-- This creates a row in the xmlcolumn table from a single drug file.
INSERT INTO drugs_xmlcolumn_type
VALUES(XMLType(bfilename('XMLPHARMA', 'db00001.xml'),nls_charset_id('AL32UTF8')).CreateSchemaBasedXML(
'http://localhost:8080/home/pharma/drugbank.xsd'))
;--The create using the full xml file into a relational table with an xml column fails
INSERT INTO drugs_xmlcolumn_type
VALUES(XMLType(bfilename('XMLPHARMA', 'drugbank.xml'),nls_charset_id('AL32UTF8')).CreateSchemaBasedXML(
'http://localhost:8080/home/pharma/drugbank.xsd'))
VALUES(XMLType(bfilename('XMLPHARMA', 'drugbank.xml'),nls_charset_id('AL32UTF8')).CreateSchemaBasedXML(
ERROR at line 2:
ORA-30951: Element or attribute at Xpath references exceeds maximum length
Elapsed: 00:01:06.74 -
Read any XML File Elements using SAX Parser in J2se
Hi All
I can able to parsed one structured XML file using SAX
Sample code :
// ===========================================================
// SAX DocumentHandler methods
// ===========================================================
public void startDocument() throws SAXException {
logger.info("Start of document");
public void endDocument() throws SAXException {
logger.info("End of document");
public void startElement(String namespaceURI, String localName, // local
// name
String qualName, // qualified name
Attributes attrs) throws SAXException {
elemName = new String(localName); // element name
if (elemName.equals(""))
elemName = new String(qualName); // namespaceAware = false
tagPosition = TAG_START;
// Set the string for accumulating the text in a tag to empty
elemChars = "";
// If the element name is "row", create a new row instance
// If the element is "indexxid", "ModelPrice", or "ModelSpread",
// the value will be read in the method "characters" and stored.
if (elemName.equals("row")) {
row = new IndexRow();
numRows++;
// logger.info("Number of numRow:"+numRows);
} // end method startElement
public void endElement(String namespaceURI, String simpleName, // simple
// name
String qualName // qualified name
) throws SAXException {
elemName = new String(simpleName);
if (elemName.equals(""))
elemName = new String(qualName); // namespaceAware = false
tagPosition = TAG_END;
String indexId = new String();
Double dblVal = new Double(0);
// If element name is "row", put the current row in the map for row
// instances
if (elemName.equals("row")) {
if (numRows <= 5) { logger.info("Row is: " + row.toString()); }
//ABX
//indexRows.put(row.getIndexxId(), row);
if (family.equals("ABX.HE")){
indexRows.put(row.getIndexREDId(), row);
else {
//CDX ITRXX
indexRows.put(row.getIndexxId(), row);
} else if (elemName.equals("IndexID")) {
row.setIndexxId(elemChars);
// Leave double value at default of zero if there are no chars
if (elemChars.trim().length() != 0) {
dblVal = new Double(elemChars);
row.setCompositeSpread(dblVal);
indexId = row.getIndexxId();
} else if (elemName.equals("REDCode")) {
row.setRedCode(elemChars);
else if (elemName.equals("Name")) {
row.setRowName(elemChars);
} else if (elemName.equals("Series")) {
row.setSeries(elemChars);
} else if (elemName.equals("Version")) {
row.setVersion(elemChars);
} else if (elemName.equals("Term")) {
row.setTerm(elemChars);
} else if (elemName.equals("Maturity")) {
row.setMaturity(elemChars);
} else if (elemName.equals("OnTheRun")) {
row.setOnTheRun(elemChars);
} else if (elemName.equals("Date")) {
row.setRowDate(elemChars);
} else if (elemName.equals("Depth")) {
row.setDepth(elemChars);
else if (elemName.equals("Heat")) {
// logger.info("Chars for element " + elemName + " are '" +
// elemChars + "'");
// Leave double value at default of zero if there are no chars
if (elemChars.trim().length() != 0) {
dblVal = new Double(elemChars);
row.setHeat(dblVal);
indexId = row.getIndexxId();
// ABX.HE
else if (elemName.equals("IndexREDId")){
row.setIndexREDId(elemChars);
else if (elemName.equals("Coupon")){
row.setCoupon(elemChars);
if (elemName.equals("Ontherun")) {
row.setOnTheRun(elemChars);
} // end method endElement
public void characters(char buf[], int offset, int len) throws SAXException {
// If at end of element, there will be no characters
if (tagPosition == TAG_END) {
return;
// The characteres method may be called more than once
// for an element if the internal buffer fills up.
// Append the characters until the end of the element.
String strVal = new String(buf, offset, len);
elemChars = elemChars + strVal;
} // end method characters
} // end class MarkItIndexLoader
but the problem is i want to read (parse) any XML file means any Elemets would be change any time using SAX .In the above example
else if (elemName.equals("Heat")) {
else if (elemName.equals("IndexREDId")){
} else if (elemName.equals("Maturity")) {
like above I am doing hard code Elements names and reading the values so i don't want hard coding the elements names I want to read any element name and value dynamically.
If i give any one below XML file i want to read the Elements and displaying to console without changing any code i want to read the XML document.
EX:
Student.XML: <root>..</StName>..</StAge>...</root>
Employee.XML: <root>..</EmpName>..</EmpAge>...</root>
CdCatalog.XML: <root>..</Cdtitle>...</CdNumber>...</root>
I need one java program can ready any type of XML file elements and send to the Database table.
Please any one done like this task please suggest some reference links or books or sample snippet which can help me to develop program in my requirement.
Thanks in advance
Regards
satishYou should ask in the Java forum.
Regards
Stefan -
Instance variable to hold the element of a tag in the xml file
Hi I have an xml file that is handled using this parser
<attr id="MY_NAME" >
this parser hanled the above tag but now I want to have it handle
<attr id="MY_NAME" desc="GOOD">
but I need to create an instance variable to handle the desc element in the attr tag .
Can some one help me out as this is not my file and I am having trouble to do please......
import java.util.*;
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
The SupportMatrix class provides static variables and methods to simplify
the determination of whether or not a given attribute is supported for a
certain object type (queue manager, channel, etc.), depending on the version
and platform of the queue manager to which it belongs.
The SupportMatrix class may not be instantiated. Its constructor is private.
An instance of the class is created internally in the static initializer so
that the XML parsing methods are available.
A corresponding XML document, SupportMatrix.xml, is parsed to create the various
HashMaps which contain the version/platform dependency information. A number of
inner classes are used to represent the various elements of the XML matrix
definition.
Here's a sample document:
<!-- The supportmatrix tag opens the document -->
<supportmatrix>
<!-- Objects are keyed by classid. "1" is the classid of a queue manager object. -->
<object classid="1">
<!-- Versions group attributes according to the queue manager version where they
were introduced. The "base" cmdlevel encompasses all versions up to 5.1. -->
<version cmdlevel="base">
<!-- Attributes are defined by the attr tag. -->
<attr id="MQCA_Q_MGR_NAME">
<!-- Support elements define the platform-specific requirements for an attribute. -->
<support platforms="UNIX,WINDOWS,OS400,VMS,NSK" maxlen="48" type="MQCFST"/>
<support platforms="MVS" maxlen="4" type="MQCFST"/>
</attr>
<attr id="MQCA_Q_MGR_DESC">
<!-- Specific attribute characteristics, most notably maximum len for string parms,
are defined in the support element. As shown in the following example, it may
apply to all platforms. -->
<support platforms="all" maxlen="64" type="MQCFST"/>
</attr>
<!-- Support elements are optional. -->
<attr id="MQIA_PLATFORM"/>
<attr id="MQIA_COMMAND_LEVEL"/>
</version>
<!-- The version element may 'include' other versions. Note that object elements
may also refer to other objects via the 'include' parm of the object tag.
This is to allow common attributes (especially for queues and channels) to
be shared by multiple definitions in order to reduce some of the
redundancy. -->
<version cmdlevel="520" include="base">
</version>
</object>
</supportmatrix>
The inner classes, and their hierarchical relationships are as follows:
SupportObject - corresponds to the <object> element. Stored in a static HashMap, and
keyed by classid.
VersionObject - corresponds to the <version> element. Stored in a HashMap instance
variable of the SupportObject class, keyed by cmdlevel.
AttributeObject - corresponds to the <attr> element. Stored in a HashMap instance
variable of the VersionObject class, keyed by attribute name.
PlatformObject - corresponds to the <support> element. Stored in HashMaps belonging
to the AttributeObjects, keyed by platform. A single PlatformObject
instance is created when the support tag is encountered. The
"platforms" attribute of the support element is then processed. For
each platform in the comma-delimited list, an entry is added to the
collection of PlatformObjects. This is to greatly simplify later
lookups.
In order to support the 'include' feature of object and version elements, certain
functions are recursive. If the attribute to be validated is not found for the passed
cmdlevel, the 'parent' VersionObject is consulted by means of the 'include' value. If
the chain of VersionObjects has been exhausted and the attribute in question has still not
been located, the next SupportObject in the chain is consulted in a similar fashion.
public class SupportMatrix extends DefaultHandler {
/** The objects collection holds all the SupportObjects, keyed by classid. */
private static HashMap objects;
/** xmlFile will name the xml document to be parsed. Note that using the
default class loader expects the string to be the path to the file. It must
NOT begin with the '/' character. */
private static String xmlFile =
ResourceManager.getApplicationProperties().getProperty("SupportMatrixFile");
private Stack stack;
/** This static initializer allocates the static objects collection, creates an
instance of the SupportMatrix class for xml parsing purposes, and initiates
the parse operation to populate the collection. */
static {
objects = new HashMap();
// Create a parser and process the xml doc
SupportMatrix handler = new SupportMatrix();
InputSource is = null;
try {
is = new InputSource(ClassLoader.getSystemClassLoader().getResourceAsStream(xmlFile));
XMLReader xmlReader =
SAXParserFactory.newInstance().newSAXParser().getXMLReader();
xmlReader.setFeature("http://xml.org/sax/features/namespaces", true);
xmlReader.setContentHandler(handler);
if (is == null) {
System.err.println("No input stream, dammit");
xmlReader.parse(is);
} catch(Exception e) {
e.printStackTrace();
/** Private constuctor, used only for XML parsing. */
private SupportMatrix() {
stack = new Stack();
/** Add a SupportObject instance to the objects collection. */
private void addObject(SupportObject obj) {
String key = obj.getClassId();
objects.put(key, obj);
/* DefaultHandler methods */
/** Not used. */
public void characters(char[] ch, int start, int length) {}
/** Not used. */
public void endDocument() {}
/** For the version, object, and attr elements, pop the top element of the stack. */
public void endElement(String uri, String localName, String qName) {
if (localName.equals("version") || localName.equals("object") || localName.equals("attr")) {
stack.pop();
/** Not used. */
public void setDocumentLocator(Locator locator) {}
/** Not used. */
public void startDocument() {}
/** Most of the work is done here. Create the appropriate inner class instance for
element; for object, version, and attr, push the element onto the stack so that
child elements may be added to their collections as needed. */
public void startElement(String uri, String localName, String qName,
Attributes attributes) {
String include = attributes.getValue("include");
if (localName.equals("object")) {
SupportObject obj = new SupportObject(attributes.getValue("classid"), include);
addObject(obj);
stack.push(obj);
} else if ( localName.equals("version")) {
VersionObject ver = new VersionObject(attributes.getValue("cmdlevel"), include);
((SupportObject)stack.peek()).addVersion(ver);
stack.push(ver);
} else if ( localName.equals("attr")) {
AttributeObject a = new AttributeObject(attributes.getValue("id"));
//String desc = StringFactory.getString(attributes.getValue("desc"));
//if(desc != null)
// a.setAttribute();
String readonly = attributes.getValue("readonly");
String exclude = attributes.getValue("exclude");
if (include != null && exclude != null) {
Log.log(Log.ERROR, this, "include and exclude are mutually exclusive, exclude value ignored");
exclude = null;
if (include != null) {
a.setCondition(include, true);
if (exclude != null) {
a.setCondition(exclude, false);
if (readonly != null)
a.setReadonly(readonly.equals("y"));
((VersionObject)stack.peek()).addAttr(a);
stack.push(a);
} else if (localName.equals("support")) {
String platforms = attributes.getValue("platforms");
String readonly = attributes.getValue("readonly");
String maxlen = attributes.getValue("maxlen");
String type = attributes.getValue("type");
int attrType = 0;
if (type != null) {
if (type.equals("MQCFIN")) {
attrType = CMQCFC.MQCFT_INTEGER;
} else if (type.equals("MQCFIL")) {
attrType = CMQCFC.MQCFT_INTEGER_LIST;
} else if (type.equals("MQCFST")) {
attrType = CMQCFC.MQCFT_STRING;
} else if (type.equals("MQCFSL")) {
attrType = CMQCFC.MQCFT_STRING_LIST;
} else if (type.equals("EXBIN")) {
attrType = MqcConstants.EXCFT_BINARY;
} else if (type.equals("EXPCF")) {
attrType = MqcConstants.EXCFT_PCF;
PlatformObject p = null;
if (readonly == null) {
p = new PlatformObject(platforms);
} else {
p = new PlatformObject(platforms, readonly.equals("y"));
String exclude = attributes.getValue("exclude");
if (include != null && exclude != null) {
Log.log(Log.ERROR, this, "include and exclude are mutually exclusive, exclude value ignored");
exclude = null;
if (include != null)
p.setCondition(include, true);
if (exclude != null)
p.setCondition(exclude, false);
if (attrType != 0)
p.setType(attrType);
if (maxlen != null)
p.setLen(Integer.parseInt(maxlen));
((AttributeObject)stack.peek()).addPlatform(p);
public static boolean isExported(int attribute, TopologyModelNode node) {
String name = ResourceManager.getAttributeName(attribute);
return isExported(name, node);
public static boolean isExported(String attribute, TopologyModelNode node) {
// Find the qmgr node to fetch platform and cmdlevel
TopologyModelNode qmgr = node.getModel().getQMgrNode(node.getAddress());
// If there's no qmgr for this node, it must be one of 'ours'.
if (qmgr == null)
return false; // None of 'our' objects can be exported to MQSC.
String classId = node.getClassId();
String cmdLevel = qmgr.getAttributeValue("MQIA_COMMAND_LEVEL");
String platform = qmgr.getAttributeValue("MQIA_PLATFORM");
return isExported(attribute, classId, cmdLevel, platform, node);
public static boolean isExported(int attribute, String classId, String cmdLevel, String platform,
TopologyModelNode node) {
String name = ResourceManager.getAttributeName(attribute);
return isExported(name, classId, cmdLevel, platform, node);
/** Determine if an attribute is exportable. The attribute name, the classid of the object to
which it belongs, plus the command level and platform of the queue manager are all needed
to make this determination.
Start by finding the AttributeObject for the combination of attribute, classid, and
command level. If we can't find the AttributeObject, we assume that the attribute
is not exported. Otherwise, find out if it is exportable for the selected platform.
public static boolean isExported(String attribute, String classId, String cmdLevel, String platform,
TopologyModelNode node) {
AttributeObject attr = getAttributeObject(attribute, classId, cmdLevel);
if (attr == null) {
return false;
} else {
return attr.isExported(platform, node);
public static boolean isSupported(int attribute, TopologyModelNode node) {
String name = ResourceManager.getAttributeName(attribute);
return isSupported(name, node);
public static boolean isSupported(String attribute, TopologyModelNode node) {
// Find the qmgr node to fetch platform and cmdlevel
TopologyModelNode qmgr = node.getModel().getQMgrNode(node.getAddress());
// If there's no qmgr for this node, it must be one of 'ours'.
if (qmgr == null)
return true;
String classId = node.getClassId();
String cmdLevel = qmgr.getAttributeValue("MQIA_COMMAND_LEVEL");
String platform = qmgr.getAttributeValue("MQIA_PLATFORM");
return isSupported(attribute, classId, cmdLevel, platform);
public static boolean isSupported(int attribute, String classId, String cmdLevel, String platform) {
String name = ResourceManager.getAttributeName(attribute);
return isSupported(name, classId, cmdLevel, platform);
/** Determine if an attribute is supported. The attribute name, the classid of the object to
which it belongs, plus the command level and platform of the queue manager are all needed
to make this determination.
Start by finding the SupportObject for the classid. If it isn't there, we make the assumption
(for now) that the attribute is supported. The only classids for which this can occur are
broker, agent, and the various container objects.
Propagate the isSupported request to the chain of SupportObjects (based on 'include' values)
until we get a 'true' result or we run out of SupportObjects. */
public static boolean isSupported(String attribute, String classId, String cmdLevel, String platform) {
if (attribute == null)
return false;
SupportObject obj = (SupportObject)objects.get(classId);
// If the object type isn't even in the support matrix, we interpret that to
// mean that it's a Broker or Agent, in which case all attributes are supported
// at present.
if (obj == null)
return true;
boolean result = false;
while (result == false && obj != null) {
result = obj.isSupported(attribute, cmdLevel, platform);
if (result == false && obj.getInclude() != null) {
obj = (SupportObject)objects.get(obj.getInclude());
} else
obj = null;
return result;
/** Locate an AttributeObject for a given attribute name, object type, and command level.
This is a helper function for the getMaxLen and getType methods. */
private static AttributeObject getAttributeObject(String attr, String classID, String cmdLevel) {
AttributeObject result = null;
SupportObject obj = (SupportObject)objects.get(classID);
while (result == null && obj != null) {
result = obj.getAttr(attr, cmdLevel);
if (result == null && obj.getInclude() != null) {
obj = (SupportObject)objects.get(obj.getInclude());
} else
obj = null;
return result;
/** Determine the maximum length for a given combintation of attribute name, object type,
command level, and platform. If the AttributeObject can't be found, or if the length
hasn't been set, return -1. */
public static int getMaxLen(String attr, String classId, String cmdLevel, String platform) {
AttributeObject a = getAttributeObject(attr, classId, cmdLevel);
if (a == null)
return -1;
return a.getMaxLen(platform);
/** Determine the PCF parm type for a given combintation of attribute name, object type,
command level, and platform. If the AttributeObject can't be found, or if the length
hasn't been set, return -1. */
public static int getType(String attr, String classId, String cmdLevel, String platform) {
AttributeObject a = getAttributeObject(attr, classId, cmdLevel);
if (a == null)
return -1;
return a.getType(platform);
/** Inner class to contain platform-specific info for an attribute. */
class PlatformObject {
/** This instance variable will contain the comma-delimited string of all
platforms to which this object applies. */
private String platform;
private int maxlen;
private String condition = null;
private boolean include;
private boolean readonly;
private boolean lenSet;
private int attrType;
private boolean typeSet;
public PlatformObject(String p, boolean readonly) {
platform = p;
this.readonly = readonly;
lenSet = false;
typeSet = false;
public PlatformObject(String p) {
this(p, false);
public void setCondition(String condition, boolean include) {
this.condition = condition;
this.include = include;
public boolean isReadonly() {
return readonly;
public boolean isExported(TopologyModelNode node) {
if (condition != null) {
boolean test = false;
try {
test = Utilities.evaluateCondition(node, condition);
} catch (Exception e) {}
if (include ^ test)
return false;
return !readonly;
public void setLen(int len) {
maxlen = len;
lenSet = true;
public void setType(int type) {
attrType = type;
typeSet = true;
public String getPlatform() {
return platform;
public int getMaxLen() {
if (!lenSet)
return -1;
return maxlen;
public int getType() {
if (!typeSet)
return -1;
return attrType;
/** This class represents a specific MQSeries attribute. It can optionally contain
instances of the PlatformObject class as needed. When the 'platforms' collection
is empty, the attribute is supported on all platforms. It is also possible to
include a PlatformObject for the 'all' platform, if specific attribute characteristics
need representation. When the 'platforms' collection is non-empty, it will include one
entry for each platform where the attribute is supported. */
class AttributeObject {
private String attribute;
private String attrValue;
private HashMap platforms;
private String condition = null;
private boolean include;
private boolean readonly = false;
public AttributeObject(String a) {
this(a, false);
public AttributeObject(String a, boolean readonly) {
attribute = a;
platforms = new HashMap();
this.readonly = readonly;
public void setCondition(String condition, boolean include) {
this.condition = condition;
this.include = include;
public void setReadonly(boolean readonly) {
this.readonly = readonly;
public boolean isReadonly() {
return readonly;
public void addPlatform(PlatformObject p) {
for (StringTokenizer st = new StringTokenizer(p.getPlatform(), ","); st.hasMoreTokens() ;) {
platforms.put(st.nextToken(), p);
public PlatformObject getPlatform(String platform) {
PlatformObject p = (PlatformObject)platforms.get(platform);
if (p == null)
p = (PlatformObject)platforms.get("all");
return p;
public String getAttribute() {
return attribute;
public int getMaxLen(String platform) {
PlatformObject p = getPlatform(platform);
if (p == null)
return -1;
return p.getMaxLen();
public int getType(String platform) {
PlatformObject p = getPlatform(platform);
if (p == null)
return -1;
return p.getType();
public boolean isSupported(String platform) {
if (platforms.isEmpty()) {
return true;
if (platforms.containsKey(platform)) {
return true;
if (platforms.containsKey("all")) {
return true;
return false;
public boolean isExported(String platform, TopologyModelNode node) {
if (readonly) {
Log.log(Log.DEBUG, this, attribute + " is readonly, returning false");
return false;
if (condition != null) {
Log.log(Log.DEBUG, this, "Testing condition = " + condition);
boolean test = false;
try {
test = Utilities.evaluateCondition(node, condition);
Log.log(Log.DEBUG, this, "Condition result is " + test);
} catch (Exception e) {
Log.log(Log.ERROR, this, "Condition through an exception");
if (include ^ test)
return false;
if (platforms.isEmpty()) {
return true;
PlatformObject p = getPlatform(platform);
if (p == null) {
Log.log(Log.DEBUG, this, platform + " not found for " + attribute + ", returning false");
return false;
return p.isExported(node);
/** This class represents a specific value of a queue manager's command level. A
given instance of this class may 'include' a 'parent' instance through its
include instance variable. The traversal of the parent/child hierarchy is
delegated to the SupportObject class, since that is where the collection of
VersionObjects lives. */
class VersionObject {
private String cmdLevel;
private String include;
private HashMap attributes;
public VersionObject(String cmdLevel, String include) {
this.cmdLevel = cmdLevel;
this.include = include;
attributes = new HashMap();
public void addAttr(AttributeObject attr) {
attributes.put(attr.getAttribute(), attr);
public AttributeObject getAttr(String attr) {
return (AttributeObject)attributes.get(attr);
public String getCmdLevel() {
return cmdLevel;
public String getInclude() {
return include;
public boolean isSupported(String attr, String platform) {
AttributeObject obj = (AttributeObject)attributes.get(attr);
if (obj == null) {
return false;
} else
return obj.isSupported(platform);
/** This class represents an MQSeries object type, as identified by its classid, e.g.
queue manager or local queue. This class implements an include facility similar to
that described for the VersionObject. The traversal of that hierarchy is delegated
to the static isSupported method, because the collection of SupportObject instances
is a static variable of the SupportMatrix class. */
class SupportObject {
private String classId;
private String include;
private HashMap versions;
public SupportObject(String classId, String include) {
this.classId = classId;
this.include = include;
versions = new HashMap();
public void addVersion(VersionObject obj) {
String key = obj.getCmdLevel();
versions.put(key, obj);
public String getClassId() {
return classId;
public String getInclude() {
return include;
public boolean isSupported(String attr, String cmdLevel, String platform) {
boolean result = false;
VersionObject obj = (VersionObject)versions.get(cmdLevel);
if (obj == null)
obj = (VersionObject)versions.get("base");
// I don't actually know what it means if obj is null at this point.
// It probably can't happen.
if (obj == null)
return false;
while (result == false && obj != null) {
result = obj.isSupported(attr, platform);
if (result == false && obj.getInclude() != null) {
obj = (VersionObject)versions.get(obj.getInclude());
} else
obj = null;
return result;
public AttributeObject getAttr(String attr, String cmdLevel) {
AttributeObject result = null;
VersionObject obj = (VersionObject)versions.get(cmdLevel);
if (obj == null)
obj = (VersionObject)versions.get("base");
// I don't actually know what it means if obj is null at this point.
// It probably can't happen.
if (obj == null)
return null;
while (result == null && obj != null) {
result = obj.getAttr(attr);
if (result == null && obj.getInclude() != null)
obj = (VersionObject)versions.get(obj.getInclude());
else
obj = null;
return result;
}Are you the one who commented out the code you're looking for ?//String desc = StringFactory.getString(attributes.getValue("desc"));You just have to modify you AttributeObject class to hold a new field : String description. And then, it's up to you to create a new constructor or a new setter method.
Btw, this is not a Swing related question.
Maybe you are looking for
-
How do I get my data from my old iphone to a new iphone?
Hi I backed-up the data from my old iphone via itunes onto my computer. Now, I have "restored" the replacement iphone- or so I thought. There is none of my old info onto this new phone. Help. I am at a loss. Where do I go to get all of my old da
-
I have 3 categories under my Photo albums on my iphone. Camera Roll, Photo Library, and Picture. Now looking at these three options shows 125 pictures in the Camera roll, 84 Pictures in the Photo Library, and 81 Pictures in the Picture option.... Now
-
Hello Everyone, My RSS feeds stopped working on April 12th. Two of them have given me feeds today but nothing from yesterday or the day before or the day before that. Very strange. I've tried quitting Mail, restarting my computer, control clicking on
-
Is it possible that my iphone shows water damage, but never seen water?
I recently took my iphone to the apple store because it was freezing and stuff. i come to find out that my phone according to the guys from apple that my phone has water damage, my phone has never seen water. Please help.
-
Optimize query on table with 10 million transactions
Is there a better way than showed below to retrieve the transactions from a table that contains more than 9 million transactions. SELECT FROM TAB_COMM WHERE CARR_CD='ABC' AND POL_NUM LIKE 'HPA%';How to optimize this query to show results for policy s