From 6c29a6dd22bf346059ceb25613d8616165c20dc8 Mon Sep 17 00:00:00 2001 From: kohsah Date: Sat, 20 May 2017 23:58:41 +0530 Subject: [PATCH] Updated xml.xsd to include version from 2005, that has a xml:id declaration; This has been introduced into the AKN schema since WD17 --- .../org/akomantoso/schema/v3/release/xml.xsd | 147 ++++++++++++++++++ .../akomantoso/TestAnParser_30release.java | 49 ++++++ ...TestAnUnmarshallAndMarshall_30release.java | 123 +++++++++++++++ .../TestAnValidatorTest_30release.java | 57 +++++++ .../org/akomantoso/api/AnVersionTest.java | 71 +++++++++ .../testdocs/akomantoso_doc_30release.xml | 94 +++++++++++ .../akomantoso_doc_30release_fail.xml | 94 +++++++++++ 7 files changed, 635 insertions(+) create mode 100644 src/main/java/org/akomantoso/schema/v3/release/xml.xsd create mode 100644 src/test/java/org/akomantoso/TestAnParser_30release.java create mode 100644 src/test/java/org/akomantoso/TestAnUnmarshallAndMarshall_30release.java create mode 100644 src/test/java/org/akomantoso/TestAnValidatorTest_30release.java create mode 100644 src/test/java/org/akomantoso/api/AnVersionTest.java create mode 100644 src/test/java/testdocs/akomantoso_doc_30release.xml create mode 100644 src/test/java/testdocs/akomantoso_doc_30release_fail.xml diff --git a/src/main/java/org/akomantoso/schema/v3/release/xml.xsd b/src/main/java/org/akomantoso/schema/v3/release/xml.xsd new file mode 100644 index 0000000..16108f2 --- /dev/null +++ b/src/main/java/org/akomantoso/schema/v3/release/xml.xsd @@ -0,0 +1,147 @@ + + + + + + + See http://www.w3.org/XML/1998/namespace.html and + http://www.w3.org/TR/REC-xml for information about this namespace. + + This schema document describes the XML namespace, in a form + suitable for import by other schema documents. + + Note that local names in this namespace are intended to be defined + only by the World Wide Web Consortium or its subgroups. The + following names are currently defined in this namespace and should + not be used with conflicting semantics by any Working Group, + specification, or document instance: + + base (as an attribute name): denotes an attribute whose value + provides a URI to be used as the base for interpreting any + relative URIs in the scope of the element on which it + appears; its value is inherited. This name is reserved + by virtue of its definition in the XML Base specification. + + id (as an attribute name): denotes an attribute whose value + should be interpreted as if declared to be of type ID. + The xml:id specification is not yet a W3C Recommendation, + but this attribute is included here to facilitate experimentation + with the mechanisms it proposes. Note that it is _not_ included + in the specialAttrs attribute group. + + lang (as an attribute name): denotes an attribute whose value + is a language code for the natural language of the content of + any element; its value is inherited. This name is reserved + by virtue of its definition in the XML specification. + + space (as an attribute name): denotes an attribute whose + value is a keyword indicating what whitespace processing + discipline is intended for the content of the element; its + value is inherited. This name is reserved by virtue of its + definition in the XML specification. + + Father (in any context at all): denotes Jon Bosak, the chair of + the original XML Working Group. This name is reserved by + the following decision of the W3C XML Plenary and + XML Coordination groups: + + In appreciation for his vision, leadership and dedication + the W3C XML Plenary on this 10th day of February, 2000 + reserves for Jon Bosak in perpetuity the XML name + xml:Father + + + + + This schema defines attributes and an attribute group + suitable for use by + schemas wishing to allow xml:base, xml:lang, xml:space or xml:id + attributes on elements they define. + + To enable this, such a schema must import this schema + for the XML namespace, e.g. as follows: + <schema . . .> + . . . + <import namespace="http://www.w3.org/XML/1998/namespace" + schemaLocation="http://www.w3.org/2005/08/xml.xsd"/> + + Subsequently, qualified reference to any of the attributes + or the group defined below will have the desired effect, e.g. + + <type . . .> + . . . + <attributeGroup ref="xml:specialAttrs"/> + + will define a type which will schema-validate an instance + element with any of those attributes + + + + In keeping with the XML Schema WG's standard versioning + policy, this schema document will persist at + http://www.w3.org/2005/08/xml.xsd. + At the date of issue it can also be found at + http://www.w3.org/2001/xml.xsd. + The schema document at that URI may however change in the future, + in order to remain compatible with the latest version of XML Schema + itself, or with the XML namespace itself. In other words, if the XML + Schema or XML namespaces change, the version of this document at + http://www.w3.org/2001/xml.xsd will change + accordingly; the version at + http://www.w3.org/2005/08/xml.xsd will not change. + + + + + + Attempting to install the relevant ISO 2- and 3-letter + codes as the enumerated possible values is probably never + going to be a realistic possibility. See + RFC 3066 at http://www.ietf.org/rfc/rfc3066.txt and the IANA registry + at http://www.iana.org/assignments/lang-tag-apps.htm for + further information. + + The union allows for the 'un-declaration' of xml:lang with + the empty string. + + + + + + + + + + + + + + + + + + + + + + + + See http://www.w3.org/TR/xmlbase/ for + information about this attribute. + + + + + + See http://www.w3.org/TR/xml-id/ for + information about this attribute. + + + + + + + + + + diff --git a/src/test/java/org/akomantoso/TestAnParser_30release.java b/src/test/java/org/akomantoso/TestAnParser_30release.java new file mode 100644 index 0000000..2e3f5a8 --- /dev/null +++ b/src/test/java/org/akomantoso/TestAnParser_30release.java @@ -0,0 +1,49 @@ +package org.akomantoso; + +import java.io.File; +import java.io.IOException; +import junit.framework.TestCase; +import org.akomantoso.api.AnDocType; +import org.akomantoso.api.AnParser; +import org.akomantoso.api.AnVersion; + +/** + * Test the validation of Akoma Ntoso documents, returns line number + and column number when validation fails + * @author Ashok Hariharan + */ +public class TestAnParser_30release extends TestCase { + + AnVersion _version = new AnVersion(3, "release"); + // file to parse and discover type + File _parse = new File("./src/test/java/testdocs/akomantoso_doc_30release.xml"); + + + public TestAnParser_30release(String testName) throws IOException { + super(testName); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + /** + * Test of validate method, of class AnValidator. + */ + public void testParse() throws Exception { + System.out.println("parse"); + // file 1 should validate + AnDocType resultDoc = (new AnParser()).parse(_version, _parse); + assertEquals(resultDoc.objClass, + "org.akomantoso.schema.v3.release.OpenStructure"); + assertEquals(resultDoc.typeName, + "doc"); + + } +} diff --git a/src/test/java/org/akomantoso/TestAnUnmarshallAndMarshall_30release.java b/src/test/java/org/akomantoso/TestAnUnmarshallAndMarshall_30release.java new file mode 100644 index 0000000..dcf4703 --- /dev/null +++ b/src/test/java/org/akomantoso/TestAnUnmarshallAndMarshall_30release.java @@ -0,0 +1,123 @@ +package org.akomantoso; + +import junit.framework.TestCase; +import org.akomantoso.api.AnVersion; +import org.akomantoso.schema.v3.release.*; + +import javax.xml.bind.*; +import java.io.File; +import java.io.FileNotFoundException; + +/** + * Created by ashok on 20-May-17. + */ +public class TestAnUnmarshallAndMarshall_30release extends TestCase { + + File _anDoc = new File("./src/test/java/testdocs/akomantoso_doc_30release.xml"); + + + public TestAnUnmarshallAndMarshall_30release(String testName) { + super(testName); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testUnmarshall_3_0() throws JAXBException { + + AnVersion version = null ; + try { + version = new AnVersion(3, "release"); + } catch (FileNotFoundException ex) { + // version does not exist ! + } + if (null == version) { + fail("Schema not found !"); + } + JAXBContext jc = version.getContext(); + Unmarshaller unmarshaller = jc.createUnmarshaller(); + JAXBElement anType = (JAXBElement)unmarshaller.unmarshal(_anDoc); + AkomaNtosoType anDoc = anType.getValue(); + /** + * + */ + String aName = anDoc.getDoc().getName(); + assertEquals("name attribute should be memorandum !", aName, + (String)"memorandum"); + VersionType vType = anDoc.getDoc().getContains(); + assertEquals("contains should be 'originalVersion'", + vType.value(), "originalVersion"); + } + + /** + * This test always passes, it demonstrates marshalling an Akoma Ntoso document + * @throws JAXBException + */ + public void testMarshall_3_0() throws JAXBException{ + AnVersion ver=null; + try { + ver = new AnVersion(3, "release"); + } catch (FileNotFoundException ex) { + // schema does not exist + } + if (null == ver) { + fail("Schema not found !"); + } + JAXBContext jc = ver.getContext(); + Marshaller marshaller = jc.createMarshaller(); + marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, + true); + + // create the root akomaNtoso element + ObjectFactory of = new ObjectFactory(); + AkomaNtosoType anType = new AkomaNtosoType(); + OpenStructure ost = new OpenStructure(); + ost.setName("test_doc"); + ost.setContains(VersionType.SINGLE_VERSION); + + // create the meta element + Meta meta = new Meta(); + // create the publication tag + Publication pub = new Publication(); + pub.setWId("test_pub"); + pub.setName("pub"); + pub.setDate("2013-01-01"); + pub.setNumber("42"); + // add the publication element to the meta element + meta.setPublication(pub); + //create the identification element + Identification idf = new Identification(); + idf.setSource("#a_source"); + //create a work element + FRBRWork work = of.createFRBRWork(); + //set FRBRthis on work + ValueType vThis = new ValueType(); + vThis.setValue("/ak/bill/2013-01-01/A1/memorandum"); + work.setFRBRthis(vThis); + //set FRBRuri on work + ValueType vURI = new ValueType(); + vURI.setValue("/ak/bill/2013-01-01/A1"); + work.getFRBRuri().add(vURI); + //add the identification to the work + idf.setFRBRWork(work); + //add the identifcatin on the meta + meta.setIdentification(idf); + //add the meta + ost.setMeta(meta); + //add the doc type to the akomaNtoso element + anType.setDoc(ost); + JAXBElement rootElem = of.createAkomaNtoso(anType); + marshaller.marshal(rootElem, System.out); + assertEquals(true, true); + } + + + +} diff --git a/src/test/java/org/akomantoso/TestAnValidatorTest_30release.java b/src/test/java/org/akomantoso/TestAnValidatorTest_30release.java new file mode 100644 index 0000000..d100b65 --- /dev/null +++ b/src/test/java/org/akomantoso/TestAnValidatorTest_30release.java @@ -0,0 +1,57 @@ +package org.akomantoso; + +import junit.framework.TestCase; +import org.akomantoso.api.AnValidator; +import org.akomantoso.api.AnValidatorError; +import org.akomantoso.api.AnVersion; + +import java.io.File; +import java.io.IOException; + +/** + * Created by ashok on 20-May-17. + */ +public class TestAnValidatorTest_30release extends TestCase { + + AnVersion _version = new AnVersion(3, "release"); + // test file 1 - this should validte + File _validate1 = new File("./src/test/java/testdocs/akomantoso_doc_30release.xml"); + // test file 2 - this should fail + File _validate2 = new File("./src/test/java/testdocs/akomantoso_doc_30release_fail.xml"); + + AnValidator _validator = new AnValidator(); + + public TestAnValidatorTest_30release(String testName) throws IOException { + super(testName); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + /** + * Test of validate method, of class AnValidator. + */ + public void testValidate() throws Exception { + System.out.println("validate"); + // file 1 should validate + AnValidatorError result = _validator.validate(_version, _validate1); + assertEquals("Validation of file failed when it should have succeeded", + result.isError(), false); + // file 2 should fail, but failure should match specific line and col number + result = _validator.validate(_version, _validate2); + assertEquals("Validation of file succeeded when it should have failed", + result.isError(), true); + System.out.println("error details : "); + System.out.println(" line : " + result.getLineNumber() + ", " + + "col : " + result.getColumnNumber()); + assertEquals("line number should be 42 !", result.getLineNumber(), (Integer)42); + assertEquals("col number should be 102 !", result.getColumnNumber(), (Integer)102); + } +} diff --git a/src/test/java/org/akomantoso/api/AnVersionTest.java b/src/test/java/org/akomantoso/api/AnVersionTest.java new file mode 100644 index 0000000..31c1b9e --- /dev/null +++ b/src/test/java/org/akomantoso/api/AnVersionTest.java @@ -0,0 +1,71 @@ +package org.akomantoso.api; + +import junit.framework.TestCase; + +import javax.xml.bind.JAXBContext; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by ashok on 20-May-17. + */ +public class AnVersionTest extends TestCase { + + List versions = new ArrayList<>(0); + class versionNum { + Integer majorVersion; + String minorVersion; + versionNum(Integer mav, String miv) { + this.majorVersion = mav; + this.minorVersion = miv; + } + + }; + versionNum[] vNums = { + new versionNum(3, "csd06"), + new versionNum(3, "csd06"), + new versionNum(3, "csd07"), + new versionNum(3, "csd08"), + new versionNum(3, "csd09"), + new versionNum(3, "csd10"), + new versionNum(3, "csd11"), + new versionNum(3, "csd12"), + new versionNum(3, "csd13"), + new versionNum(3, "release") + }; + public void setUp() throws Exception { + super.setUp(); + for(versionNum num: vNums) { + versions.add(new AnVersion(num.majorVersion, num.minorVersion)); + } + } + + public void tearDown() throws Exception { + + } + + public void testGetPackageForVersion() throws Exception { + for(AnVersion v: versions) { + String sV = v.getPackageForVersion(); + assertNotNull(sV); + System.out.println("package: " + sV); + } + } + + public void testGetContext() throws Exception { + for(AnVersion v: versions) { + JAXBContext cxt = v.getContext(); + assertNotNull(cxt); + } + } + + public void testGetSchemaForVersion() throws Exception { + for(AnVersion v: versions) { + InputStream is = v.getSchemaForVersion(); + assertNotNull(is); + if (is != null) {is.close();} + } + } + +} \ No newline at end of file diff --git a/src/test/java/testdocs/akomantoso_doc_30release.xml b/src/test/java/testdocs/akomantoso_doc_30release.xml new file mode 100644 index 0000000..96bc365 --- /dev/null +++ b/src/test/java/testdocs/akomantoso_doc_30release.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ MEMORANDUM ON THE OBJECTS OF THE HIGHER EDUCATION + LAWS AMENDMENT BILL, 2010 +

+
+ + + + 1. + MAIN OBJECT OF BILL + + +

+ The main object of the Bill is to align the laws listed in subparagraph 1.2 with + the new education dispensation that came about during 2009 when the former + Department of Education was split into the Department of Basic Education + and the Department of Higher Education and Training. In terms of section 97 + of the Constitution of the Republic of Bungeni, 1996, the administration + and powers and functions entrusted by the laws listed in subparagraph 1.2 + were transferred to the Minister of Higher Education and Training by means + of Proclamation No. 44 of 2009, published in Government Gazette No. 32367 + of 1 July 2009. The administration and powers and functions entrusted to the + Minister of Labour by certain provisions of the Skill Development Act, 2002 + (Act No. 7 of 2002) (the SD Act), were similarly transferred to the Minister of + Higher Education and Training by Proclamation No. 56 of 2009, published in + Government Gazette No. 32549 of 4 September 2009. The Bill also seeks to + align those provisions of the SD Act with the new education dispensation + referred to above.

+
+
+
+
+
+
+
diff --git a/src/test/java/testdocs/akomantoso_doc_30release_fail.xml b/src/test/java/testdocs/akomantoso_doc_30release_fail.xml new file mode 100644 index 0000000..02f94ed --- /dev/null +++ b/src/test/java/testdocs/akomantoso_doc_30release_fail.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ MEMORANDUM ON THE OBJECTS OF THE HIGHER EDUCATION + LAWS AMENDMENT BILL, 2010 +

+
+ + + + 1. + MAIN OBJECT OF BILL + + +

+ The main object of the Bill is to align the laws listed in subparagraph 1.2 with + the new education dispensation that came about during 2009 when the former + Department of Education was split into the Department of Basic Education + and the Department of Higher Education and Training. In terms of section 97 + of the Constitution of the Republic of Bungeni, 1996, the administration + and powers and functions entrusted by the laws listed in subparagraph 1.2 + were transferred to the Minister of Higher Education and Training by means + of Proclamation No. 44 of 2009, published in Government Gazette No. 32367 + of 1 July 2009. The administration and powers and functions entrusted to the + Minister of Labour by certain provisions of the Skill Development Act, 2002 + (Act No. 7 of 2002) (the SD Act), were similarly transferred to the Minister of + Higher Education and Training by Proclamation No. 56 of 2009, published in + Government Gazette No. 32549 of 4 September 2009. The Bill also seeks to + align those provisions of the SD Act with the new education dispensation + referred to above.

+
+
+
+
+
+
+