15.159 SEM_APIS.VALIDATE_GEOMETRIES

形式

SEM_APIS.VALIDATE_GEOMETRIES(
     model_name      IN VARCHAR2, 
     SRID            IN NUMBER, 
     tolerance       IN NUMBER,
     parallel        IN PLS_INTEGER DEFAULT NULL, 
     tablespace_name IN VARCHAR2 DEFAULT NULL,
     options         IN VARCHAR2 DEFAULT NULL,
     network_owner  IN VARCHAR2 DEFAULT NULL,
     network_name   IN VARCHAR2 DEFAULT NULL);

説明

指定モデルのすべてのジオメトリ・リテラルが指定したSRIDおよび許容値について有効であるかどうかを判別します。

パラメータ

model_name

検証するジオメトリ・リテラルが含まれるモデルの名前。ネイティブ・モデルのみ指定できます。

SRID

空間参照システムのSRID。

tolerance

検証に使用する許容値。

parallel

操作に関連付けられている並列度。パラレル実行の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

tablespace_name

{model_name}_IVG$、{model_name}_FXT$および{model_name}_NFT$の宛先表領域。

options

検証のオプションを指定する文字列。サポートされているオプションは次のとおりです。

  • RECTIFY=T。ステージング表{model_name}_FXT$および{model_name}_NFT$が作成され、それぞれ修正できるトリプルと修正できないトリプルが含まれます。これらの表を使用してモデルを修正できます。

  • AUTOCORRECT=T。無効でも修正できるジオメトリが含まれるトリプルが修正されます。また、修正できないジオメトリが含まれるトリプルが入っている表{model_name}_NFT$が、そのようなトリプルを手動で修正できるように作成されます。

  • STANDARD_CRS_URI=T。標準CRS (座標参照システム) URIを使用します。

  • GML_LIT_SRL=T。修正されたジオメトリ・リテラルにogc:gmlLiteralシリアライズを使用します。ogc:wktLiteralシリアライズがデフォルトです。

  • GEOJSON_LIT_SRL=T。修正されたジオメトリ・リテラルにogc:geoJSONLiteralシリアライズを使用します。ogc:wktLiteralシリアライズがデフォルトです。
  • KML_LIT_SRL=T。修正されたジオメトリ・リテラルにogc:kmlLiteralシリアライズを使用します。ogc:wktLiteralシリアライズがデフォルトです。
network_owner

RDFネットワークの所有者。(表1-2を参照してください。)

network_name

RDFネットワークの名前。(表1-2を参照してください。)

使用に関するノート

このプロシージャは、SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT関数のラッパーです。

無効なジオメトリ・リテラルが含まれる表{model_name}_IVG$が作成されます。オプションで、ステージング表{model_name}_FXT$および{model_name}_NFT$を作成でき、それぞれ修正できるトリプルと修正できないトリプルが含まれます。ステージング表を使用すると、ユーザーは無効なジオメトリを修正できます。モデルの無効でも修正できるジオメトリ・リテラルは、指定した場合、自動的に修正することもできます。

モデルの無効なジオメトリの修正後、SEM_APIS.PURGE_UNUSED_VALUESを実行してセマンティク・ネットワークから無効なジオメトリ・リテラル値をパージすることをお薦めします。

モデルの詳細は、「セマンティク・データのモデル化」および「データベースのセマンティク・データ」を参照してください。

セマンティク・ネットワークのタイプおよびオプションの詳細は、「RDFネットワーク」を参照してください。

次の例では、無効なジオメトリ・リテラルがいくつか含まれるモデルを作成し、RECTIFY=TオプションおよびSTANDARD_CRS_URI=Tオプションを使用してモデルを検証しています。

-- Create model
EXEC sem_apis.create_sem_model('m', NULL, NULL, network_owner=>'RDFUSER', network_name=>'NET1');

-- Insert invalid geometries
-- Duplicated coordinates - rectifiable
insert into RDFUSER.NET1#RDFT_M(triple) values (sdo_rdf_triple_s('m','<http://my.org/geom1>', '<http://www.opengis.net/rdf#asWKT>', '"POLYGON((1.0 2.0, 3.0 2.0, 1.0 4.0, 1.0 2.0, 1.0 2.0))"^^<http://xmlns.oracle.com/rdf/geo/WKTLiteral>'), network_owner=>'RDFUSER', network_name=>'NET1');
-- Boundary is not closed – rectifiable
insert into RDFUSER.NET1#RDFT_M(triple) values (sdo_rdf_triple_s('m','<http://my.org/geom2>', '<http://www.opengis.net/rdf#asWKT>', '"POLYGON((1.0 2.0, 3.0 2.0, 3.0 4.0, 1.0 4.0))"^^<http://xmlns.oracle.com/rdf/geo/WKTLiteral>'), network_owner=>'RDFUSER', network_name=>'NET1');
-- Less than 4 points – non rectifiable
insert into RDFUSER.NET1#RDFT_M(triple) values (sdo_rdf_triple_s('m:<http://my.org/g2>','<http://my.org/geom3>', '<http://www.opengis.net/rdf#asWKT>', '"POLYGON((1.0 2.0, 3.0 2.0, 1.0 4.0))"^^<http://xmlns.oracle.com/rdf/geo/WKTLiteral>'), network_owner=>'RDFUSER', network_name=>'NET1');
commit;

-- Validate
EXEC sem_apis.validate_geometries(model_name=>'m',SRID=>8307,tolerance=>0.1, options=>'STANDARD_CRS_URI=T RECTIFY=T', network_owner=>'RDFUSER', network_name=>'NET1');
 
-- Check invalid geometries
SELECT original_vid, error_msg, corrected_geom_literal FROM M_IVG$;

-- Check rectified triples
select RDF$STC_GRAPH, RDF$STC_SUB, RDF$STC_PRED, RDF$STC_OBJ from M_FXT$;

-- Check non-rectified triples
select RDF$STC_GRAPH, RDF$STC_SUB, RDF$STC_PRED, RDF$STC_OBJ, ERROR_MSG from M_NFT$;