Skip to content

Commit

Permalink
Updated xml.xsd to include version from 2005, that has a xml:id decl…
Browse files Browse the repository at this point in the history
…aration; This has been introduced into the AKN schema since WD17
  • Loading branch information
kohsah committed May 20, 2017
1 parent 570588d commit 6c29a6d
Show file tree
Hide file tree
Showing 7 changed files with 635 additions and 0 deletions.
147 changes: 147 additions & 0 deletions src/main/java/org/akomantoso/schema/v3/release/xml.xsd
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@

<?xml version='1.0'?>
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en">

<xs:annotation>
<xs:documentation>
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
</xs:documentation>
</xs:annotation>

<xs:annotation>
<xs:documentation>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:
&lt;schema . . .>
. . .
&lt;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.

&lt;type . . .>
. . .
&lt;attributeGroup ref="xml:specialAttrs"/>

will define a type which will schema-validate an instance
element with any of those attributes</xs:documentation>
</xs:annotation>

<xs:annotation>
<xs:documentation>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.
</xs:documentation>
</xs:annotation>

<xs:attribute name="lang">
<xs:annotation>
<xs:documentation>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.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:union memberTypes="xs:language">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>

<xs:attribute name="space">
<xs:simpleType>
<xs:restriction base="xs:NCName">
<xs:enumeration value="default"/>
<xs:enumeration value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>

<xs:attribute name="base" type="xs:anyURI">
<xs:annotation>
<xs:documentation>See http://www.w3.org/TR/xmlbase/ for
information about this attribute.</xs:documentation>
</xs:annotation>
</xs:attribute>

<xs:attribute name="id" type="xs:ID">
<xs:annotation>
<xs:documentation>See http://www.w3.org/TR/xml-id/ for
information about this attribute.</xs:documentation>
</xs:annotation>
</xs:attribute>

<xs:attributeGroup name="specialAttrs">
<xs:attribute ref="xml:base"/>
<xs:attribute ref="xml:lang"/>
<xs:attribute ref="xml:space"/>
</xs:attributeGroup>

</xs:schema>
49 changes: 49 additions & 0 deletions src/test/java/org/akomantoso/TestAnParser_30release.java
Original file line number Diff line number Diff line change
@@ -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");

}
}
Original file line number Diff line number Diff line change
@@ -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<AkomaNtosoType> anType = (JAXBElement<AkomaNtosoType>)unmarshaller.unmarshal(_anDoc);
AkomaNtosoType anDoc = anType.getValue();
/**
* <doc name="memorandum" contains="originalVersion">
*/
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<AkomaNtosoType> rootElem = of.createAkomaNtoso(anType);
marshaller.marshal(rootElem, System.out);
assertEquals(true, true);
}



}
57 changes: 57 additions & 0 deletions src/test/java/org/akomantoso/TestAnValidatorTest_30release.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Loading

0 comments on commit 6c29a6d

Please sign in to comment.