Sei sulla pagina 1di 13

Oracle XML DB and lorms Integration

. ]oivt o.cb ava Oracte !bite Paer


.rit 200






































OracIe XML DB and Forms Integration
Page 2
Oracle XML DB and lorms Integration

Introduction........................................................................................................1
Business Requirements.................................................................................1
Meeting Business Requirements..................................................................1
Application Architecture ..............................................................................1
lile 1ranser between Clients and the Database ......................................2
Steps to Deelop the LaborAutomat Application ........................................2
Step 1 - Creating a Repository lolder .......................................................2
Step 2 - Checking or the existence o a older in the Oracle XML DB
repository........................................................................................................3
Step 3 - Registering an XML Schema.........................................................3
Step 4 - Use l1P to moe XML iles........................................................4
Step 5 - Copy Data rom the Oracle XML DB Repository to an XML
Schema-based table .......................................................................................5
Step 6 - Creating relational iews using XPA1l and XQuery ..............6
Step - lorm to display data.......................................................................9
Installing and Running the Demo...................................................................9
Steps to run the Oracle lorms demo.......................................................10
1he Import Process ....................................................................................10
1he Lxport Process ....................................................................................10
View XML content .....................................................................................10
Delete a Purchase Order rom the database............................................10
Conclusion ........................................................................................................10

OracIe XML DB and Forms Integration
Page 1
Oracle XML DB and lorms Integration
IN1RODUC1ION
1his paper is a case study on how Robert Bosch India Limited successully deeloped and deployed an application using Oracle
XML DB and Oracle lorms to process large amounts o complex measurement data collected rom stringent testing o
automotie parts. \e will use code samples to walk through the steps o loading XML documents into Oracle XML DB,
creating relational iews oer stored XML documents, and using Oracle lorms to display XML data through relational iews.
Business Requirements
Robert Bosch India Ltd. is a wholly owned subsidiary o the Bosch Group, a well-known global automotie technology products
manuacturer. \hen a customer orders a custom automotie part ,e.g., a uel injector,, the contract would always include a
detailed speciication ,e.g., temperature, engine speed, uel olume,. Ater a part sample is deeloped, test benches will be used
to simulate an enironment conorming to the speciication or collecting and eriying measurements. Both the measurement
instructions and the results are in XML ormat.
abor.vtovat is an application sotware, deeloped by Robert Bosch India, to store, process, and report measurement
instructions and measurement results. \ith this application, a user can deine measurement instructions to be transerred online
to the test bench. 1he test bench will then collect measured results to be stored in a database. linally, reports will be generated
rom the database or users to analyze the results.
Meeting Business Requirements
abor.vtovat has an online interace with the test bench or the purpose o bi-directional transerring o data between the
testbench and the database. 1he data exchanged has a complex structure and thereore XML ormat was chosen or data
representation and exchange. 1wo options were considered or processing the complex-structured XML data: Jaa or Oracle
XML DB. Although custom Jaa code can always be deeloped to meet our business requirements, Oracle XML DB can handle
the same tasks with much less coding and maintenance eort. Built on the solid oundation o Oracle database, Oracle XML DB
proides extensie capabilities or the eicient storage, retrieal, generation, and management o large olumes o XML data.
Based on the comparison below, we arried at the decision that abor.vtovat will use Oracle XML DB or XML data
processing.


XML DB Java
XML data can be retrieed using standard SQL
unctions ,Lxtract, LxtractValue, XML1able, etc.,
Jaa code to read xml
XML data can be generated using standard SQL
unctions ,XMLLlement, XMLlorest, XMLAgg, etc.,
Jaa code to generate XML
Database-natie XML processing Integrate Jaa Code with Oracle lorms as
PJC,Pluggable Jaa Component,
Capability to create high perormance relational iews
oer natiely stored XML data
Creation o temporary tables to store parsed data or
display

1he best part o Oracle XML DB is that all the storage and processing are database-natie with superior perormance and
simpliied application deelopment, deployment, and maintenance. Ater quickly ramping up the initial learning cure, the entire
business requirements were implemented using Oracle XML DB and lorms.

AppIication Architecture
1he diagram below depicts the major components and processing low o our application.
OracIe XML DB and Forms Integration
Page 2

FiIe Transfer between CIients and the Database
One o the main challenges to process iles inside the database is to load them into the database. One option is to hae a shared
older on the database serer ile system and then use DBMS_LOB or U1L_lILL to load iles into the database. Since database
administrators are usually hesitant to allow access to the database ile system or security concerns, a better option would be to
use Oracte `M D reo.itor, as a temporary storage or transerring iles between the client tier and the database tier.

Similar to a ile system, Oracte `M D reo.itor, allows ile storage in the database as iles` in hierarchically-structured olders.
1hese iles and olders are reerred to as re.ovrce. and can be accessed using standard Internet protocols such as l1P, l11P, and
\LBDa. 1here are also data dictionary iews ,RLSOURCL_VIL\ and PA1l_VIL\, that proide a mechanism or using
SQL to access data stored in an Oracle XML DB repository. lor complete details about Oracle XML DB repository, please reer
to Oracle documentation: Oracte `M D Deretoer. Cviae.

In the ollowing sections, we walk through the essential processing steps o the abor.vtovat application.
S1LPS 1O DLVLLOP 1HL LABORAU1OMA1 APPLICA1ION
Step 1 - Creating a Repository FoIder

As shown below, an XML DB repository older resource can be created by a database user haing the S\SDBA priilege.

DECLARE
l_success BOOLEAN := FALSE;
l_resourceURL RESOURCE_VIEW.ANY_PATH%TYPE := '/public/scott';
BEGIN
IF (NOT DBMS_XDB.EXISTSRESOURCE(l_resourceURL)) THEN
l_success := DBMS_XDB.CREATEFOLDER(l_resourceURL);
COMMIT;
END IF;
END;

Since older creation is a DML operation, an explicit COMMI1 is required to make the changes permanent.
Oracle XML DB
Oracle Iorms
Client

Data blocks based on
relational views.
XML files
Windows
I1P
Copy
Schema based
XML1ype table
PurchaseOrder
relational views
Copy
Repository

OracIe XML DB and Forms Integration
Page 3
Step 2 - Checking for the existence of a foIder in the OracIe XML DB repository
1o eriy that a older has indeed been created, we can use the ollowing SQL statement to query the RESOURCE_VIEW
dictionary iew. Notice that resource names are case sensitie.

SELECT any_path
FROM resource_view
WHERE EQUALS_PATH (res, `/public/scott') =1
Step 3 - Registering an XML Schema

An XML Schema deines the structure, content, and other aspects o a set o XML documents. \hen an XML Schema is
registered, it generates an object-relational storage structure ,SQL types and tables, to natiely store XML iles inside the
database. Oracle XML DB proides a lexible platorm or XML storage mapping. lor example,
I the data is highly structured then each element in XML documents can be stored object-relationally as columns in
database tables.
I the data is unstructured then the data can be stored in CLOBs.

1here are additional adantages o using XML schema to enable structured storage o XML documents:
Validation o instance documents to ensure data quality
XML documents are stored natiely or scalability and high perormance
DOM idelity to ensure preseration o inormation in XML documents
Optimized collection management or ease o maintenance
A number o indexing schemes are aailable or natiely stored XML data to improe perormance
A object model can be automatically deried rom an XML schema to simpliy the mapping process

1o reduce oerhead, by deault, Oracle XML DB does not conduct ull schema alidation when an XML document is stored
into the database. loweer, there are XML1ype methods or explicitly alidating XML documents stored natiely inside the
database.

An XML Schema is registered using DBMS_XMLSCHEMA.RegisterSchema(). 1he SQL objects created during the
schema registration process are case sensitie and you hae to enclose them with double quotes while making direct reerences
to them. 1o aoid this case sensitie problem you can always annotate the schema elements using attributes deined in Oracle
XDB namespace: xmlns:xdb=http://xmlns.oracle.com/xdb.

1o monitor the creation o object types, collections, and tables during XML schema registration, you can set the ollowing eent
beore inoking DBMS_XMLSClLMA.RegisterSchema,,.

ALTER SESSION SET events='31098 trace name context forever';

Setting this eent causes Oracle XML DB to log eery CRLA1L 1\PL and CRLA1L 1ABLL statements. 1he log ile is
created in the user session trace ile, which can be ound on the database serer ile system under the
$ORACLE_HOME/admin/$ORACLE_SID/udump directory. \ou can also check the alue o the USER_DUMP_DEST
parameter to ind this directory. 1his log ile will be an useul aid in diagnosing problems with XML schema registration.

In the example below, we chose to manually create a table with an XML1ype column and selected the object-relational storage
option. 1his allows us to put in more inormation in the table to hae more control oer the XML documents based on other
business logic.

--Register XML schema
DECLARE
--assign the schema content to the variable here
l_clob CLOB := 'XML Schema Content';
BEGIN
DBMS_XMLSCHEMA.REGISTERSCHEMA
('http://rbin.com/po.xsd' --url to identify the schema in the database
, l_clob --schema content
, TRUE --local/global schema. in this case it is local
, TRUE --generate types during registration
OracIe XML DB and Forms Integration
Page 4
, FALSE --do not generate beans
, FALSE --do not generate default table for storage
, FALSE --force option
, USER); --owner
END;
/
--create table with a column based on XML schema
CREATE TABLE tab_xmldata
(id NUMBER PRIMARY KEY
,xml_data SYS.XMLTYPE)
XMLTYPE COLUMN xml_data STORE AS OBJECT RELATIONAL
XMLSCHEMA "http://rbin.com/po.xsd"
ELEMENT "PurchaseOrder"
/
Ater an XML schema is successully registered, wheneer an XML ile reerencing a registered XML Schema is placed in the
XML DB repository, Oracle automatically stores the XML instance into the deault table created as a result o the XML schema
registration ,GLN_1ABLLS~1RUL, process. \ou can then access the XML content rom the deault table. Similarly,
wheneer this ile is deleted rom the repository, the data is also deleted rom the deault table belonging to the XML schema.

Registered schema can be dropped by using DBMS_XMLSClLMA.DeleteSchema,,. During the delete operation, it has to irst
drop all the object tables and types created during the schema registration process. 1he orce option is needed to ignore any
inter-dependencies among object tables and SQL types. 1he example shows such an operation.

DBMS_XMLSCHEMA.DeleteSchema
( SCHEMA_URL => `http://rbin.com/po.xsd'
, DELETE_OPTION => DBMS_XMLSCHEMA.DELETE_CASCADE_FORCE)

Below are two data dictionary iews that proide inormation about the registered schemas and the created tables:

Useful views Description
user_xml_schemas lists all registered XML schema owned by the user
user_xml_tables lists all the table belonging to a XML schema

Step 4 - Use FTP to move XML fiIes

Now we are ready to l1P iles to the XML DB repository and then copy them to the deault table. In this section we will see
how l1P scripts can be generated dynamically and how to perorm l1P rom Oracle lorms.

l1P script is generated on the client machine dynamically rom Oracle lorms. lere is the code to do it. 1his procedure is to be
added to the program unit o orms.

PROCEDURE FTP
( p_SourceFile IN VARCHAR2
, p_DestFile IN VARCHAR2
, p_mode IN VARCHAR2 DEFAULT 'PUT') IS

ftp_host VARCHAR2(200) := 'koredm106118';
ftp_port VARCHAR2(10) := '2100';
ftp_user VARCHAR2(32) := 'scott';
ftp_pwd VARCHAR2(32) := 'tiger';
ftp_script_file VARCHAR2(255);
file_dir VARCHAR2(255);
file_handle TEXT_IO.FILE_TYPE;
BEGIN
--based on the mode, get the source/target file directory
IF p_mode = 'PUT' THEN
file_dir := substr(p_SourceFile, 1, instr(p_SourceFile, '\', -1));
ELSIF p_mode = 'GET' THEN
OracIe XML DB and Forms Integration
Page 5
file_dir := substr(p_DestFile, 1, instr(p_DestFile, '\', -1));
END IF;
--generate the ftp script under the same directory
--from where the file is to be uploaded/downloaded
ftp_script_file := file_dir||'ftp_script.txt';

--generate the ftp script file
file_handle := TEXT_IO.FOPEN(ftp_script_file, 'W');
TEXT_IO.PUT_LINE(file_handle, 'OPEN'||' '||ftp_host|| ' '||ftp_port);
TEXT_IO.PUT_LINE(file_handle, 'USER'||' '||ftp_user|| ' '||ftp_pwd);
TEXT_IO.PUT_LINE(file_handle, 'LCD' ||' '||rtrim(file_dir, '\'));
TEXT_IO.PUT_LINE(file_handle, p_mode||' '||p_SourceFile||' '||p_DestFile);
TEXT_IO.PUT_LINE(file_handle, 'CLOSE');
TEXT_IO.PUT_LINE(file_handle, 'BYE');
TEXT_IO.FCLOSE(file_handle);

HOST('FTP -d -n -s:'||ftp_script_file);
END FTP;

lere is a sample script ile:

Open koredm106118 2100
User scott tiger
Lcd c:\myfiles
Put c:\myfiles\sample.xml /public/scott/sample.xml
Close
bye

l1P is conducted with a script ile so that the entire process can be done without user interention. 1he script will be generated
under the same path rom where the ile is to be imported or exported. Once the script is aailable, the next step is to inoke it.
It is done using lOS1 command aailable in Oracle lorms as shown in the example below.

HOST(`ftp -d -n -s:c:\myfiles\ftp_script.txt');

\here c:\myfiles\ftp_script.txt is the l1P script ile .

Options or l1P
-d - enables debuggig
-n - suppress autologin ,because username and password is supplied in the script,
-s - indicates, tp process will be done using l1P script ile.


Please note that in this sample, we are using SCO11 and 1IGLR as the username and password or the l1P operations with the
database. In actual you need not expose the username and password o the session user. A dummy database user with the
CREATE SESSION priilege can be created exclusiely or l1P operations.

1o ind out the port number or l1P operations, you can login as a S\SDBA-priileged user and execute the query below rom
SQLPLUS.

SELECT ExtractValue(res,'//ftpconfig/ftp-port',
'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"') ftp_port
FROM resource_view
WHERE ANY_PATH LIKE '/xdbconfig.xml'

Step 5 - Copy Data from the OracIe XML DB Repository to an XML Schema-based tabIe
Ater the l1P process is successul, the ile is now inside the Oracle XML DB repository. 1o copy the contents to the table
rom repository, we used XDBURI1\PL, which has methods like GetXML,, and GetClob,, that return XML1ype content in
desired ormat.

OracIe XML DB and Forms Integration
Page 6
All database processing required or this paper is part o the PAK_U1ILI1\.PAK package that can be ound in the separate
download. lere is the code snippet rom the package which does the task o copying the XML ile rom the repository to the
table.

PROCEDURE copy_data_from_repos
(p_resourceURL IN resource_view.any_path%TYPE) IS
l_xml SYS.XMLTYPE;
l_id tab_xmldata.id%TYPE;

BEGIN
SELECT NVL(MAX(id), 0)+1 INTO l_id FROM tab_xmldata;

/* extract the file contents from the repository */
SELECT XDBURITYPE(p_resourceURL).GetXML() INTO l_xml FROM dual;

INSERT INTO tab_xmldata VALUES (l_id, l_xml);

/*delete the resource after copying the content */
delete_resource_from_repos(p_resourceURL);

COMMIT;
END copy_data_from_repos;

Step 6 - Creating reIationaI views using XPATH and XQuery

Once you hae the XML data in an XML1ype column , the next step is to create iews with XPath expressions. In this case we
will create three iews, PURCHASEORDER_HEADER, SHIPPING_INSTRUCTIONS, and LINEITEMS. 1he major
adantage here is that once the iews are created using XPA1l, additional iews can be created to hide any XML complexity.

1o extract data rom XML1ype ield, unctions LX1RAC1, LX1RAC1VALUL, and XML1ABLL SQL unctions are used as
shown below.

Lxtract

Lxtract is used when the XPA1l expression will result in a collection o nodes. 1he
return type is XML1\PL. 1he results o Lxtract can be either a document or a
document ragment. lor example,

SQL> SELECT EXTRACT(xml_data,
'/PurchaseOrder/Reference') reference FROM
tab_xmldata
/

REFERENCE
------------------------------------------------------
<Reference>AMCEWEN-20021009123336171PDT</Reference>

1he aboe query returns an XML node. But i you want only the data without the
element tags, you should use the text,, unction in the XPath.

SQL> SELECT EXTRACT(xml_data,
'/PurchaseOrder/Reference/text()') reference FROM
tab_xmldata
/

REFERENCE
------------------------------------------------------
AMCEWEN-20021009123336171PDT

LxtractValue()

Returns the alue o a single node or an attribute. lor example,

OracIe XML DB and Forms Integration
Page 7
SQL> SELECT EXTRACTVALUE(xml_data,
'/PurchaseOrder/Reference') reference FROM
tab_xmldata
/

REFERENCE
-----------------------------------------------------
AMCEWEN-20021009123336171PDT

XML1able() SQL Iunction

XML1ABLL,, is an SQL,XML standard unction to allow processing o XQuery expressions through SQL. XML1ABLL takes
adantage o the power and lexibility o both XQuery and SQL. Using 1his unction you can construct XML data using
relational data , query relational data as i it were XML, and construct relational data rom XML.

\ou can use XML1ABLL,, to transorm the result o an XQuery ealuation into relational rows and columns o a irtual table.
\ou can then insert into a pre-existing database table, or you can query it using SQL-in a join expression. 1his unction can be
used in the lROM clause o the SQL statement. Prior to Oracle Database 10g Release 2, the unctionality o XML1ABLL,, had
to be achieed using a more cumbersome combination o 1ABLL,,, XMLSLQULNCL,,, and LX1RAC1,, unctions.

1he example below is the more cumbersome approach using Oracle Database 9i Release 2 and Oracle Database 10g Release 1

SELECT extractValue(value(t),'/Description')
FROM tab_xmldata X,
TABLE ( xmlsequence
(extract(xml_data,'/PurchaseOrder/LineItems/LineItem/Description'))) t;

Here is an example oI how XMLTable() can be used in Oracle Database 10g Release 2.

SELECT description
FROM tab_xmldata ,
xmltable('/PurchaseOrder/LineItems/LineItem/Description' passing xml_data
columns
description varchar2(64) path '/')

Code sample below demonstrates how we can create XML1ype iews.

SET ECHO ON

CREATE OR REPLACE VIEW purchaseorder_header_xml AS
SELECT id
,EXTRACTVALUE(xml_data, '/PurchaseOrder/Reference') reference
,EXTRACTVALUE(xml_data, '/PurchaseOrder/Requestor') requestor
,EXTRACTVALUE(xml_data, '/PurchaseOrder/User') po_user
,EXTRACTVALUE(xml_data, '/PurchaseOrder/CostCenter') costcenter
,EXTRACTVALUE(xml_data, '/PurchaseOrder/SpecialInstructions') spl_instructions
FROM tab_xmldata
/
CREATE OR REPLACE VIEW purchaseorder_header
AS SELECT * FROM purchaseorder_header_xml
/

CREATE OR REPLACE VIEW shipping_instructions_xml AS
SELECT id, name, address, telephone
FROM tab_xmldata
, XMLTABLE('/PurchaseOrder/ShippingInstructions' passing xml_data
COLUMNS
name VARCHAR2(64) path 'name'
,address VARCHAR2(64) path 'address'
,telephone VARCHAR2(10) path 'telephone')
OracIe XML DB and Forms Integration
Page 8
/

CREATE OR REPLACE VIEW shipping_instructions
AS SELECT * FROM shipping_instructions_xml
/

CREATE OR REPLACE VIEW line_items_xml AS
SELECT id, partid, item_number, description, unit_price, quantity
FROM tab_xmldata
, XMLTABLE('/PurchaseOrder/LineItems/LineItem' passing xml_data
COLUMNS
partid VARCHAR2(15) path 'Part/@Id'
,item_number VARCHAR2(30) path '@ItemNumber'
,description VARCHAR2(45) path 'Description'
,unit_price VARCHAR2(15) path 'Part/@UnitPrice'
,quantity NUMBER(5,2) path 'Part/@Quantity')
/

CREATE OR REPLACE VIEW line_items
AS SELECT * FROM line_items_xml
/

In the aboe DDL, there are XXX_XML iews, which contains the XPA1l expressions, and there are other relational iews
created on top o these XXX_XML iews. 1he reason is that Oracle lorms at the moment does not allow data blocks to be
based on iews containing XPath. As a workaround, additional relational iews are created.

1he next step is to deelop the GUI to display the data. 1his GUI will be deeloped using Oracle lorms as the main purpose o
this paper is to show Oracle lorms deelopers how to integrate Oracle XML DB based on the iews created in step 6.
loweer, we will not discuss the steps to create the orms in this paper.

OracIe XML DB and Forms Integration
Page 9
Step 7 - Form to dispIay data
lere is the sample orm that can be downloaded with other code.

Import or Lxport XML iles. 1ype the ilename
And click the start button



INS1ALLING AND RUNNING 1HL DLMO

Please note that his paper does not deal with Oracle XML DB installation o coniguration, it is assumed that you are working
with oracle database 9i rel 2 and aboe and XML DB is installed and conigured on your database. \our database listener is
conigured to run on deault port o 1521 and it also accepts l1P requests.

Conigure or install XML DB in the database
Lxecute the create_resource.sql with SYS account or with user haing S\SDBA priilege.
Register the XML schema in the database using register_schema.sql. 1his can be done under scott user or any
other demo user.
Create the table tab_xmldata using create_objects.ddl
Create XML iews using xml_views.sql.
Create the utility package pak_utility.pak

1he aboe scripts can be run against Oracle database 9.2.0.5 and aboe.

OracIe XML DB and Forms Integration
Page 10
Steps to run the OracIe Forms demo
The Import Process
Choose the Import radio button on the top let o the screen.
1ype in the XML ile name with the ull path, in the purchase order XML file ield.
Click the start import button.
The Export Process
Choose the Lxport radio button on the top let o the screen.
1ype in the XML ile name with the ull path, in the purchase order XML file ield.
Select the purchase order record rom the Purchase Orders block or which the XML ile has to be exported.
Click the start Lxport button.
View XML content
Select the purchase order record rom the Purchase Orders block or which the XML ile has to be iewed.
Click the Show XML button.
DeIete a Purchase Order from the database
Select the purchase order record rom the Purchase Orders block or which the XML ile has to be exported.
Click the Delete Order button.
CONCLUSION
Using XML DB eatures, we were able to represent complex-structured XML data in a relational ormat and integrate with an
Oracle lorms application. 1his integration proides a simple, lexible, and powerul solution to process XML iles without
writing a single line o Jaa code or accessing the ile system on the database serer. Most importantly, the entire processing low
takes place natiely inside the database and the results are eectiely displayed using Oracle lorms. 1his proides huge
perormance gains when large olumes o XML iles hae to be processed.
In short, Oracle XML DB has not only met our business requirements in high perormance XML processing, it has also
proided us with a rich set o database-natie capabilities to simpliy and accelerate the deelopment, deployment, and
maintenance eort o a critical business application.



OracIe XML DB and Forms Integration
ApriI 2006
Author: Raghu Shyam T, TechnicaI Manager, Robert Bosch India Limited
Contributing Authors: Geoff Lee, PrincipaI Product Manager, OracIe Corporation

OracIe Corporation
WorId Headquarters
500 OracIe Parkway
Redwood Shores, CA 94065
U.S.A.

WorIdwide Inquiries:
Phone: +1.650.506.7000
Fax: +1.650.506.7200
www.oracIe.com

Copyright 2006, Robert Bosch India Limited and OracIe Corporation. AII rights
reserved.
This document is provided for information purposes onIy and the contents hereof
are subject to change without notice. This document is not warranted to be error-
free, nor subject to any other warranties or conditions, whether expressed oraIIy or
impIied in Iaw, incIuding impIied warranties and conditions of merchantabiIity or
fitness for a particuIar purpose. We specificaIIy discIaim any IiabiIity with respect
to this document and no contractuaI obIigations are formed either directIy or
indirectIy by this document. This document may not be reproduced or transmitted
in any form or by any means, eIectronic or mechanicaI, for any purpose, without
our prior written permission. OracIe is a registered trademark of OracIe
Corporation and/or its affiIiates. Other names may be trademarks of their
respective owners.

This document is pubIished onIy for information purpose. THE DOCUMENT IS
PROVIDED WITHOUT ANY REPRESENTATION OR WARRANTY AND IN NO EVENT
SHALL BOSCH BE LIABLE TO ANY OTHER PERSON/ENTITY IN CONNECTION WITH THE
USE OF THE INFORMATION MADE AVAILABLE. BOSCH reserves the right to make changes
and/or updates with respect to the information at any time without notice. Further, BOSCH
does not make any representations about the accuracy of the information contained in the
document for any purpose and aII such information has been provided on an "as is" basis
without warranty of any kind. BOSCH hereby discIaims aII warranties and conditions with
regard to the document incIuding aII impIied warranties and conditions of merchantabiIity,
fitness for a particuIar purpose, titIe and non-infringement. The document is made avaiIabIe
for information purpose onIy, further copying, reproduction or redistribution of the document
is expressIy prohibited. In no event shaII BOSCH be IiabIe for Iost profits or any direct,
indirect, speciaI, punitive, incidentaI or consequentiaI damages arising out of or in
connection with the documents.BOSCH is registered trademark of Robert Bosch and its
subsidary.

Potrebbero piacerti anche