Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
DataExchange/XML/Schema.cpp
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#include "Stroika/Foundation/StroikaPreComp.h"
5
7
8#include "DOM.h"
9#include "SAXReader.h"
10#include "Schema.h"
11
12#include "Providers/IProvider.h"
13
14using namespace Stroika::Foundation;
17using namespace Stroika::Foundation::DataExchange::XML;
18using namespace Stroika::Foundation::DataExchange::XML::Schema;
19
20// Comment this in to turn on aggressive noisy DbgTrace in this module
21//#define USE_NOISY_TRACE_IN_THIS_MODULE_ 1
22
23/*
24 ********************************************************************************
25 ********************************* Schema::Ptr **********************************
26 ********************************************************************************
27 */
28#if qStroika_Foundation_DataExchange_XML_SupportDOM
29template <>
31{
32 return DOM::Document::New (fRep_->GetData ());
33}
34#endif
35template <>
36XML::DOM::Document::Ptr Schema::Ptr::As (const Providers::IDOMProvider& p)
37{
38 return DOM::Document::New (p, fRep_->GetData ());
39}
40
41/*
42 ********************************************************************************
43 ********************************* Schema::New **********************************
44 ********************************************************************************
45 */
46Ptr Schema::New (const Providers::ISchemaProvider& p, const Streams::InputStream::Ptr<byte>& schemaData, const Resource::ResolverPtr& resolver)
47{
48 return Ptr{p.SchemaFactory (schemaData, resolver)};
49}
50
51#if qStroika_Foundation_DataExchange_XML_SupportSchema
52Ptr Schema::New (const Streams::InputStream::Ptr<byte>& schemaData, const Resource::ResolverPtr& resolver)
53{
54 static const XML::Providers::ISchemaProvider* kDefaultProvider_ = XML::Providers::kDefaultProvider ();
55 return New (*kDefaultProvider_, schemaData, resolver);
56}
57#endif
58
59/*
60 ********************************************************************************
61 ************************************ ValidateFile ******************************
62 ********************************************************************************
63 */
64#if qStroika_Foundation_DataExchange_XML_SupportSchema and qStroika_Foundation_DataExchange_XML_SupportParsing
65void DataExchange::XML::Schema::ValidateFile (const filesystem::path& externalFileName, const Ptr& schema)
66{
67 AssertNotNull (dynamic_cast<const Providers::ISAXProvider*> (schema.GetRep ()->GetProvider ()));
68 SAXParse (*dynamic_cast<const Providers::ISAXProvider*> (schema.GetRep ()->GetProvider ()),
69 IO::FileSystem::FileInputStream::New (externalFileName), nullptr, schema);
70}
71#endif
#define AssertNotNull(p)
Definition Assertions.h:333
void SAXParse(const Providers::ISAXProvider &saxProvider, const Streams::InputStream::Ptr< byte > &in, StructuredStreamEvents::IConsumer *callback=nullptr, const Schema::Ptr &schema=nullptr, Execution::ProgressMonitor::Updater progress=nullptr)
Definition SAXReader.cpp:45
Document::Ptr is create with Document::New, and is a smart pointer to a DOM document object.
Definition DOM.h:651
InputStream<>::Ptr is Smart pointer (with abstract Rep) class defining the interface to reading from ...