ドキュメントXMLをORACLEデータベースの表に挿入する際に、XMLを検証しようとしています。私はテーブル内にこのスキーマを持つXMLスキーマとXMLTYPEを定義しましたが、dbは間違ったxmlを挿入することを許可します。Oracle DBで、挿入時にXMLを検証します。
マイスキーマ:
BEGIN
dbms_xmlschema.registerschema(
schemaurl => 'http://www.testXml.com/schema.xsd',
schemadoc => xmltype('<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="Name_tp">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Id" type="xs:positiveInteger"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="Category_tp">
<xs:attribute name="NumPrize" type="xs:positiveInteger"/>
<xs:attribute name="From" type="xs:integer"/>
<xs:attribute name="To" type="xs:positiveInteger"/>
<xs:attribute name="Type" type="xs:string"/>
<xs:attribute name="Age" type="xs:positiveInteger"/>
</xs:complexType>
<xs:complexType name="Match_tp">
<xs:attribute name="typeMatch" type="xs:string"/>
</xs:complexType>
<xs:complexType name="GolfCompetition_tp">
<xs:sequence>
<xs:element name="Name" type="Name_tp"/>
<xs:element name="Date" type="xs:date"/>
<xs:element name="Sponsor" type="xs:string"/>
<xs:element name="Category" maxOccurs="unbounded" type="Category_tp"/>
<xs:element name="Reserved" type="Match_tp" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="GolfCompetition" type="GolfCompetition_tp"/>
</xs:schema>'),
local => true,
gentypes => false,
gentables => false
);
END;
マイDBスキーマ:
CREATE TYPE t_gara AS OBJECT (
id INTEGER,
informazioni XMLTYPE
);
CREATE TABLE gara OF t_gara() XMLType COLUMN informazioni
XMLSCHEMA "http://www.testXml.com/schema.xsd"
ELEMENT "GolfCompetition";
私はこの行を挿入しようとすると、私は問題ではありませんしました:
INSERT INTO GARA VALUES(1, XMLType('<GolfCompetition>
<Name Id="324">Coppa del Presidente</Name>
<Date>2009-12-25</Date>
<Sponsor>Lavazza S.p.A</Sponsor>
<Category NumPrize="3" From="0" To="12" Type="First"/>
<Category NumPrize="3" From="13" To="24" Type="Second"/>
<Category NumPrize="2" From="25" To="36" Type="Third"/>
<Category NumPrize="1" Type="Lady"/>
<Category NumPrize="1" Type="Over" Age="40"/>
</GolfCompetition>'));
しかし、これはに動作します:
INSERT INTO GARA VALUES(2, XMLType('<GolfCompetition>
<Category NumPrize="3" From="0" To="12" Type="First"/>
<Category NumPrize="3" From="13" To="24" Type="Second"/>
<Category NumPrize="2" From="25" To="36" Type="Third"/>
<Category NumPrize="1" Type="Lady"/>
<Category NumPrize="1" Type="Over" Age="40"/>
</GolfCompetition>'));
どうすれば解決できますか?