xmlwrapp
Lightweight C++ XML parsing library
relaxng.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 Vadim Zeitlin <vz-xmlwrapp@zeitlins.org>
3  * All Rights Reserved
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in
13  * the documentation and/or other materials provided with the
14  * distribution.
15  * 3. Neither the name of the Author nor the names of its contributors
16  * may be used to endorse or promote products derived from this software
17  * without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
23  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
29  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  */
32 
33 /**
34  @file
35 
36  This file contains the definition of the xml::relaxng class.
37  */
38 
39 #ifndef _xmlwrapp_relaxng_h_
40 #define _xmlwrapp_relaxng_h_
41 
42 // xmlwrapp includes
43 #include "xmlwrapp/init.h"
44 #include "xmlwrapp/export.h"
45 #include "xmlwrapp/errors.h"
46 
47 namespace xml
48 {
49 
50 // forward declarations
51 class document;
52 class error_messages;
53 
54 namespace impl
55 {
56 struct relaxng_impl;
57 }
58 
59 /**
60  XML validator using RelaxNG.
61 
62  This class is used to validate documents against RelaxNG schemas expressed
63  in XML syntax (compact RelaxNG syntax is not supported).
64 
65  @since 0.9.0
66  */
67 class XMLWRAPP_API relaxng
68 {
69 public:
70  /**
71  Parses XML RelaxNG document and creates relaxng instance from it.
72 
73  Errors are handled by @a on_error handler; by default, xml::exception
74  is thrown on errors. If there's a fatal error that prevents the relaxng
75  from being loaded and the error handler doesn't throw an exception, the
76  constructor will throw xml::exception anyway.
77  */
78  explicit relaxng(const document& doc, error_handler& on_error = throw_on_error);
79 
80  /// Destructor
81  ~relaxng();
82 
83  /**
84  Validates the document @a doc against the relaxng.
85 
86  Errors are handled by @a on_error handler; by default, xml::exception
87  is thrown on errors.
88 
89  @return `true` if the document is valid with regard to the relaxng,
90  `false` otherwise.
91  */
92  bool validate(const document& doc, error_handler& on_error = throw_on_error) const;
93 
94 private:
95  impl::relaxng_impl *pimpl_;
96 
97  // This class is not copyable
98  relaxng(const relaxng&);
99  relaxng& operator=(const relaxng&);
100 };
101 
102 } // namespace xml
103 
104 #endif // _xmlwrapp_relaxng_h_
This file contains errors-handling classes: xml::exception and xml::error_handler and derived classes...
The xml::error_handler class is used to handle libxml2 errors and warnings emitted during parsing...
Definition: errors.h:84
This file contains the definition of the xml::init class.
error_handler_throw_on_error throw_on_error
Error handler object that throws on any error.
XML validator using RelaxNG.
Definition: relaxng.h:67
The xml::document class is used to hold the XML tree and various bits of information about it...
Definition: document.h:84
XML library namespace.
Definition: attributes.h:51