https://github.com/scieloorg/porteira
API responsible for validating XML structures and generate python structures
https://github.com/scieloorg/porteira
deprecated
Last synced: 5 months ago
JSON representation
API responsible for validating XML structures and generate python structures
- Host: GitHub
- URL: https://github.com/scieloorg/porteira
- Owner: scieloorg
- License: bsd-2-clause
- Created: 2012-11-09T17:13:55.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2013-01-03T12:08:03.000Z (over 13 years ago)
- Last Synced: 2024-04-14T20:25:30.175Z (about 2 years ago)
- Topics: deprecated
- Language: Python
- Homepage:
- Size: 268 KB
- Stars: 4
- Watchers: 5
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
Porteira
========
[](https://travis-ci.org/scieloorg/porteira)
Overview
--------
API responsible for validating XML structures and generate python structures
API Usage
---------
The instance of porteira.Schema(xsd) parses and validates the time of construction instance:
>from porteira.porteira import Schema
>sch = Schema(xsd)
Validating xml against an xsd, method: Schema.validate(xml) return boolean:
>xml = '<?xml version="1.0" encoding="UTF-8"?><root><a>bla0</a><b>bla1</b></root>'
>xsd = '<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"><xs:element name="root"><xs:complexType><xs:sequence><xs:element ref="a"/><xs:element ref="b"/></xs:sequence></xs:complexType></xs:element><xs:element name="a" type="xs:NCName"/><xs:element name="b" type="xs:NCName"/>
</xs:schema>'
>from porteira.porteira import Schema
>sch = Schema(xsd)
>sch.validate(xml)
>True
Deserialized XML to dict object, method: Schema.deserialize(xml) return dict:
>xml = '<?xml version="1.0" encoding="UTF-8"?><root><a>bla0</a><b>bla1</b></root>'
>xsd = '<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"><xs:element name="root"><xs:complexType><xs:sequence><xs:element ref="a"/><xs:element ref="b"/></xs:sequence></xs:complexType></xs:element><xs:element name="a" type="xs:NCName"/><xs:element name="b" type="xs:NCName"/>
</xs:schema>'
>from porteira.porteira import Schema
>sch = Schema(xsd)
>sch.deserialize(xml)
>OrderedDict([(u'root', OrderedDict([(u'a', u'bla0'), (u'b', u'bla1')]))])
Serialize dict to XML, method: Schema.serialize(dict) return XML:
>dict_obj = {'a': {'b': '1', 'c': '2'}}
>from porteira.porteira import Schema
>sch = Schema()
>sch.serialize(dict_obj)
><?xml version="1.0" encoding="utf-8"?>\n<a><c>2</c><b>1</b></a>
Get_validation_errors return a list of syntax and schema errors otherwise empty list, method: Schema.get_validation_errors(xml) return list:
Valid XML:
>xml = '<?xml version="1.0" encoding="UTF-8"?><root><a>bla0</a><b>bla1</b></root>'
>xsd = '<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"><xs:element name="root"><xs:complexType><xs:sequence><xs:element ref="a"/><xs:element ref="b"/></xs:sequence></xs:complexType></xs:element><xs:element name="a" type="xs:NCName"/><xs:element name="b" type="xs:NCName"/>
</xs:schema>'
>from porteira.porteira import Schema
>sch = Schema(xsd)
>sch.serialize(dict_obj)
>sch.get_validation_errors(xml)
>[]
Invalid XML:
>invalid_xml = '<?xml version="1.0" encoding="UTF-8"?><root><a>bla0</a><b>bla1</b></root>'
>xsd = '<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"><xs:element name="root"><xs:complexType><xs:sequence><xs:element ref="a"/><xs:element ref="b"/></xs:sequence></xs:complexType></xs:element><xs:element name="a" type="xs:NCName"/><xs:element name="b" type="xs:NCName"/>
</xs:schema>'
>from porteira.porteira import Schema
>sch = Schema(xsd)
>sch.serialize(dict_obj)
>sch.get_validation_errors(invalid_xml)
>[(u'PARSER', 1, 53, u'FATAL', u'ERR_TAG_NAME_MISMATCH', u'Opening and ending tag mismatch: a line 1 and unparseable')]
Errors format returned from this method:
Output Format:
[(DOMIAN, LINE, COLUMN, LEVEL, TYPE_NAME, MESSAGE),]
Ex.: [(PARSER, 3, 51, FATAL, ERR_TAG_NAME_MISMATCH, Opening and
ending tag mismatch: statpage line 3 and startpage),
(SCHEMASV, 2, 0, ERROR, SCHEMAV_CVC_ELT_1, Element 'wizard':
No matching global declaration available for the validation root)]
How to Install?
=================
>$ pip install porteira