diff --git a/citygml4j-quality-ade/pom.xml b/citygml4j-quality-ade/pom.xml index 78cbccd56b0a663cf186954999ee3db0eccc51fb..e1b6881fc9ca08d06cdee270ce8cb1fcce1cc2ad 100644 --- a/citygml4j-quality-ade/pom.xml +++ b/citygml4j-quality-ade/pom.xml @@ -4,7 +4,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>de.hft.stuttgart</groupId> <artifactId>citygml4j-quality-ade</artifactId> - <version>0.1.0</version> + <version>0.1.1</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java index 295a709ff062fa18cbb4476dd56c88421d6a51f2..ee927deb9b84866a1968181b2f15cb17ccce5d73 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEContext.java @@ -28,7 +28,7 @@ import de.hft.stuttgart.quality.marshaller.QualityAdeUnmarshaller; public class QualityADEContext implements ADEContext { - private final List<ADEModule> modules = Collections.singletonList(QualityADEModule.V0_1); + private final List<ADEModule> modules = Collections.singletonList(QualityADEModule.V0_1_1); @Override public List<ADEModule> getADEModules() { diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java index e54dd3762a23f4acc2ff48ca65e963f77fa04811..b9dbfff29e9adbb13e2d35ec285259a6e82377e1 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/QualityADEModule.java @@ -32,9 +32,9 @@ import de.hft.stuttgart.quality.model.Validation; public class QualityADEModule extends ADEModule { - public static final String NAMESPACE_URI = "https://transfer.hft-stuttgart.de/pages/qualityade/0.1"; + public static final String NAMESPACE_URI = "https://transfer.hft-stuttgart.de/pages/qualityade/0.1.1"; - public static final QualityADEModule V0_1 = new QualityADEModule(); + public static final QualityADEModule V0_1_1 = new QualityADEModule(); private HashMap<String, Class<? extends AbstractFeature>> features; private HashSet<String> featureProperties; diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java index c3a9ee6efa23780fcbc56bacdc06c9f5505cd823..37acd130dd7e62e150b6199bc7302db68bce2d97 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/marshaller/QualityAdeMarshaller.java @@ -90,7 +90,8 @@ public class QualityAdeMarshaller implements ADEMarshaller { lock.lock(); try { if (elementMapper == null) { - elementMapper = TypeMapper.<JAXBElement<?>>create().with(Validation.class, this::createValidation) + elementMapper = TypeMapper.<JAXBElement<?>>create() + .with(Validation.class, this::createValidation) .with(ValidationResult.class, this::createValidationResult); } } finally { @@ -106,7 +107,8 @@ public class QualityAdeMarshaller implements ADEMarshaller { lock.lock(); try { if (typeMapper == null) { - typeMapper = TypeMapper.create().with(Validation.class, this::marshalValidation) + typeMapper = TypeMapper.create() + .with(Validation.class, this::marshalValidation) .with(ValidationResult.class, this::marshalValidationResult) .with(ConsecutivePointsSame.class, this::marshalConsecutivePointsSame) .with(TooFewPoints.class, this::marshalTooFewPoints) @@ -139,7 +141,7 @@ public class QualityAdeMarshaller implements ADEMarshaller { } private ValidationType marshalValidation(Validation src) { - ValidationType dest = factory.createValidationType(); + ValidationType dest = new ValidationType(); if (src.isSetDateTime()) { dest.setValidationDate(src.getValidationDate()); diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java index 65a515ad38316e5232d0bc1408d1b805feda26f5..c2cbb61b0551b5bb2cae772af76428328b262f4a 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeMissingType.java @@ -17,7 +17,7 @@ package de.hft.stuttgart.quality.model.jaxb; import javax.xml.bind.annotation.XmlRootElement; -@XmlRootElement(name = "SEM_ATTRIBUTE_MISSING") +@XmlRootElement(name = "SE_ATTRIBUTE_MISSING") public class AttributeMissingType extends ValidationErrorType { private String childId; diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java index ca4b04585be3d8d8fa8f51743bfbbc3330d1a7d4..6ea84b507655961fcd19c8d2eea67608b7e669ec 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/AttributeWrongValueType.java @@ -17,7 +17,7 @@ package de.hft.stuttgart.quality.model.jaxb; import javax.xml.bind.annotation.XmlRootElement; -@XmlRootElement(name = "SEM_ATTRIBUTE_WRONG_VALUE") +@XmlRootElement(name = "SE_ATTRIBUTE_WRONG_VALUE") public class AttributeWrongValueType extends ValidationErrorType { private String childId; diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorId.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorId.java index 98da8d110c56f677d62e44c10548716eaf918691..cb34d11c8af741170f2d89224cee993d8a4cebcd 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorId.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/ErrorId.java @@ -25,6 +25,6 @@ public enum ErrorId { GE_P_INTERSECTING_RINGS, GE_P_HOLE_OUTSIDE, GE_P_ORIENTATION_RINGS_SAME, GE_P_INNER_RINGS_NESTED, GE_S_TOO_FEW_POLYGONS, GE_S_NOT_CLOSED, GE_S_NON_MANIFOLD_EDGE, GE_S_POLYGON_WRONG_ORIENTATION, GE_S_ALL_POLYGONS_WRONG_ORIENTATION, GE_S_NON_MANIFOLD_VERTEX, GE_S_SELF_INTERSECTION, - GE_S_MULTIPLE_CONNECTED_COMPONENTS, SEM_ATTRIBUTE_WRONG_VALUE, SEM_ATTRIBUTE_MISSING + GE_S_MULTIPLE_CONNECTED_COMPONENTS, SE_ATTRIBUTE_WRONG_VALUE, SE_ATTRIBUTE_MISSING } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementId.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementId.java index 7d74ff185df6ac4cfa5c0f1573b01196e9f76005..851382c29b104f65c000aed4b4a0c5fc806150a2 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementId.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/RequirementId.java @@ -25,6 +25,6 @@ public enum RequirementId { R_GE_P_ORIENTATION_RINGS_SAME, R_GE_P_INNER_RINGS_NESTED, R_GE_S_TOO_FEW_POLYGONS, R_GE_S_NOT_CLOSED, R_GE_S_NON_MANIFOLD_EDGE, R_GE_S_POLYGON_WRONG_ORIENTATION, R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION, R_GE_S_NON_MANIFOLD_VERTEX, R_GE_S_SELF_INTERSECTION, R_GE_S_MULTIPLE_CONNECTED_COMPONENTS, - R_SEM_ATTRIBUTES_EXISTING, R_SEM_ATTRIBUTES_CORRECT + R_SE_ATTRIBUTES_EXISTING, R_SE_ATTRIBUTES_CORRECT } diff --git a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java index 74978949cb5094f37bd2c220fc82d40a293ab3cc..5f97e8e0db48b4460d44929603cb934fd7302b62 100644 --- a/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java +++ b/citygml4j-quality-ade/src/main/java/de/hft/stuttgart/quality/model/jaxb/package-info.java @@ -13,6 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@javax.xml.bind.annotation.XmlSchema(namespace = "https://transfer.hft-stuttgart.de/pages/qualityade/0.1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = { - @javax.xml.bind.annotation.XmlNs(namespaceURI = "https://transfer.hft-stuttgart.de/pages/qualityade/0.1", prefix = "qual") }) +@javax.xml.bind.annotation.XmlSchema(namespace = "https://transfer.hft-stuttgart.de/pages/qualityade/0.1.1", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = { + @javax.xml.bind.annotation.XmlNs(namespaceURI = "https://transfer.hft-stuttgart.de/pages/qualityade/0.1.1", prefix = "qual") }) package de.hft.stuttgart.quality.model.jaxb; diff --git a/citygml4j-quality-ade/src/main/resources/qualityAde.xsd b/citygml4j-quality-ade/src/main/resources/qualityAde.xsd index 77ac51313db84f6500116df971f7fa52f338609d..8234ba0e95e63a46dea84bd2035c850ebca267d1 100644 --- a/citygml4j-quality-ade/src/main/resources/qualityAde.xsd +++ b/citygml4j-quality-ade/src/main/resources/qualityAde.xsd @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" - xmlns:qual="https://transfer.hft-stuttgart.de/pages/qualityade/0.1" - targetNamespace="https://transfer.hft-stuttgart.de/pages/qualityade/0.1" + xmlns:qual="https://transfer.hft-stuttgart.de/pages/qualityade/0.1.1" + targetNamespace="https://transfer.hft-stuttgart.de/pages/qualityade/0.1.1" xmlns:core="http://www.opengis.net/citygml/2.0" xmlns:bldg="http://www.opengis.net/citygml/building/2.0" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" @@ -228,7 +228,7 @@ </sequence> </complexType> - <complexType name="SEM_ATTRIBUTE_WRONG_VALUE"> + <complexType name="SE_ATTRIBUTE_WRONG_VALUE"> <sequence> <element name="childId" type="string" minOccurs="0"/> <element name="attributeName" type="string" /> @@ -236,7 +236,7 @@ </sequence> </complexType> - <complexType name="SEM_ATTRIBUTE_MISSING"> + <complexType name="SE_ATTRIBUTE_MISSING"> <sequence> <element name="childId" type="string" minOccurs="0" /> <element name="attributeName" type="string" /> @@ -307,11 +307,11 @@ type="qual:GE_S_MULTIPLE_CONNECTED_COMPONENTS" minOccurs="0" maxOccurs="unbounded" /> - <element name="SEM_ATTRIBUTE_WRONG_VALUE" - type="qual:SEM_ATTRIBUTE_WRONG_VALUE" minOccurs="0" + <element name="SE_ATTRIBUTE_WRONG_VALUE" + type="qual:SE_ATTRIBUTE_WRONG_VALUE" minOccurs="0" maxOccurs="unbounded" /> - <element name="SEM_ATTRIBUTE_MISSING" - type="qual:SEM_ATTRIBUTE_MISSING" minOccurs="0" + <element name="SE_ATTRIBUTE_MISSING" + type="qual:SE_ATTRIBUTE_MISSING" minOccurs="0" maxOccurs="unbounded" /> </sequence> <attribute name="result" type="qual:result" /> @@ -341,8 +341,8 @@ <enumeration value="R_GE_S_NON_MANIFOLD_VERTEX" /> <enumeration value="R_GE_S_SELF_INTERSECTION" /> <enumeration value="R_GE_S_MULTIPLE_CONNECTED_COMPONENTS" /> - <enumeration value="R_SEM_ATTRIBUTES_EXISTING" /> - <enumeration value="R_SEM_ATTRIBUTES_CORRECT" /> + <enumeration value="R_SE_ATTRIBUTES_EXISTING" /> + <enumeration value="R_SE_ATTRIBUTES_CORRECT" /> </restriction> </simpleType> @@ -469,8 +469,8 @@ <enumeration value="GE_S_NON_MANIFOLD_VERTEX" /> <enumeration value="GE_S_SELF_INTERSECTION" /> <enumeration value="GE_S_MULTIPLE_CONNECTED_COMPONENTS" /> - <enumeration value="SEM_ATTRIBUTE_WRONG_VALUE" /> - <enumeration value="SEM_ATTRIBUTE_MISSING" /> + <enumeration value="SE_ATTRIBUTE_WRONG_VALUE" /> + <enumeration value="SE_ATTRIBUTE_MISSING" /> </restriction> </simpleType> diff --git a/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java b/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java index dcb5d86a74ab5f7453da03bacb3f051bf85c3aaf..07bc45a0cf5976917cb4cf121eda13d20b7fb1ba 100644 --- a/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java +++ b/citygml4j-quality-ade/src/test/java/de/hft/stuttgart/quality/QualityAdeTests.java @@ -605,6 +605,7 @@ class QualityAdeTests { error.setGeneric(true); result.getErrors().add(error); byte[] gml = writeCityGml(model); + System.out.println(new String(gml)); model = readCityGml(gml); AbstractCityObject co = model.getCityObjectMember().get(0).getCityObject(); @@ -1287,7 +1288,7 @@ class QualityAdeTests { throws ADEException, CityGMLBuilderException, CityGMLReadException { CityGMLContext context = CityGMLContext.getInstance(); List<ADEContext> adeContexts = context.getADEContexts(); - if (adeContexts == null || adeContexts.isEmpty()) { + if (adeContexts.isEmpty()) { for (ADEContext adeContext : ServiceLoader.load(ADEContext.class)) { context.registerADEContext(adeContext); } @@ -1301,7 +1302,7 @@ class QualityAdeTests { System.out.print( "[" + event.getLocator().getLineNumber() + "," + event.getLocator().getColumnNumber() + "] "); System.out.println(event.getMessage()); - return true; + throw new IllegalStateException(event.getLinkedException()); }); CityModel cityModel; try (CityGMLReader reader = in.createCityGMLReader("?", input)) { @@ -1399,7 +1400,7 @@ class QualityAdeTests { writer.setPrefixes(CityGMLVersion.DEFAULT); writer.setPrefix("qual", QualityADEModule.NAMESPACE_URI); writer.setSchemaLocation(QualityADEModule.NAMESPACE_URI, - "https://transfer.hft-stuttgart.de/pages/qualityade/0.1/qualityAde.xsd"); + "https://transfer.hft-stuttgart.de/pages/qualityade/0.1.1/qualityAde.xsd"); writer.setSchemaLocations(CityGMLVersion.DEFAULT); writer.write(model); return out.toByteArray(); diff --git a/public/0.1.1/qualityAde.xsd b/public/0.1.1/qualityAde.xsd new file mode 100644 index 0000000000000000000000000000000000000000..8234ba0e95e63a46dea84bd2035c850ebca267d1 --- /dev/null +++ b/public/0.1.1/qualityAde.xsd @@ -0,0 +1,505 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" + xmlns:qual="https://transfer.hft-stuttgart.de/pages/qualityade/0.1.1" + targetNamespace="https://transfer.hft-stuttgart.de/pages/qualityade/0.1.1" + xmlns:core="http://www.opengis.net/citygml/2.0" + xmlns:bldg="http://www.opengis.net/citygml/building/2.0" + xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" + version="1.0"> + <import namespace="http://www.opengis.net/citygml/2.0" + schemaLocation="http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd" /> + <import namespace="http://www.opengis.net/citygml/building/2.0" + schemaLocation="http://schemas.opengis.net/citygml/building/2.0/building.xsd" /> + <import + namespace="http://www.opengis.net/citygml/appearance/2.0" + schemaLocation="http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd" /> + <import namespace="http://www.opengis.net/citygml/generics/2.0" + schemaLocation="http://schemas.opengis.net/citygml/generics/2.0/generics.xsd" /> + <import namespace="http://www.opengis.net/gml" + schemaLocation="http://schemas.opengis.net/gml/2.1.2/gml.xsd" /> + + <element name="validationResult" + type="qual:validationResultType" + substitutionGroup="core:_GenericApplicationPropertyOfCityObject" /> + + <simpleType name="result" final="restriction"> + <annotation> + <documentation>Enumeration for status of check result</documentation> + </annotation> + <restriction base="string"> + <enumeration value="ERROR"> + <annotation> + <documentation>One or more errors were found</documentation> + </annotation> + </enumeration> + <enumeration value="NOT_CHECKED"> + <annotation> + <documentation>Feature was not checked</documentation> + </annotation> + </enumeration> + <enumeration value="OK"> + <annotation> + <documentation>No errors were found</documentation> + </annotation> + </enumeration> + </restriction> + </simpleType> + + <complexType name="GE_R_CONSECUTIVE_POINTS_SAME"> + <annotation> + <documentation>Consecutive point are the same</documentation> + </annotation> + <sequence> + <element name="linearRingId" type="string" /> + <element name="vertex1" type="gml:DirectPositionType" /> + <element name="vertex2" type="gml:DirectPositionType" /> + </sequence> + </complexType> + + <complexType name="GE_R_TOO_FEW_POINTS"> + <sequence> + <element name="linearRingId" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_R_SELF_INTERSECTION"> + <sequence> + <element name="linearRingId" type="string" /> + <element name="type" type="qual:ringSelfIntType" /> + <element name="edge1" type="qual:edgeType" minOccurs="0" /> + <element name="edge2" type="qual:edgeType" minOccurs="0" /> + <element name="vertex1" type="gml:DirectPositionType" + minOccurs="0" /> + <element name="vertex2" type="gml:DirectPositionType" + minOccurs="0" /> + </sequence> + </complexType> + + <simpleType name="ringSelfIntType"> + <restriction base="string"> + <enumeration value="DUPLICATE_POINT" /> + <enumeration value="POINT_TOUCHES_EDGE" /> + <enumeration value="EDGE_INTERSECTS_EDGE" /> + </restriction> + </simpleType> + + <complexType name="edgeType"> + <sequence> + <element name="from" type="gml:DirectPositionType" /> + <element name="to" type="gml:DirectPositionType" /> + </sequence> + </complexType> + + <complexType name="GE_R_NOT_CLOSED"> + <sequence> + <element name="linearRingId" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_P_INTERIOR_DISCONNECTED"> + <sequence> + <element name="polygonId" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_P_INTERSECTING_RINGS"> + <sequence> + <element name="polygonId" type="string" /> + <element name="linearRingId1" type="string" /> + <element name="linearRingId2" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_P_INNER_RINGS_NESTED"> + <sequence> + <element name="polygonId" type="string" /> + <element name="linearRingId1" type="string" /> + <element name="linearRingId2" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_P_HOLE_OUTSIDE"> + <sequence> + <element name="polygonId" type="string" /> + <element name="linearRingId" type="string" /> + </sequence> + </complexType> + + <complexType + name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION"> + <sequence> + <element name="polygonId" type="string" /> + <element name="deviation" type="gml:AngleType"></element> + </sequence> + </complexType> + + <complexType name="GE_P_ORIENTATION_RINGS_SAME"> + <sequence> + <element name="polygonId" type="string" /> + <element name="linearRingId" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_S_ALL_POLYGONS_WRONG_ORIENTATION"> + <sequence> + <element name="geometryId" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_S_POLYGON_WRONG_ORIENTATION"> + <sequence> + <element name="geometryId" type="string" /> + <element name="edges" type="qual:EdgeList" /> + </sequence> + </complexType> + + <complexType name="EdgeList"> + <sequence> + <element name="edge" type="qual:edgeType" + maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="GE_S_SELF_INTERSECTION"> + <sequence> + <element name="geometryId" type="string" /> + <element name="polygonId1" type="string" /> + <element name="polygonId2" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_S_NON_MANIFOLD_VERTEX"> + <sequence> + <element name="geometryId" type="string" /> + <element name="vertex" type="gml:DirectPositionType" /> + </sequence> + </complexType> + + <complexType name="GE_S_NON_MANIFOLD_EDGE"> + <sequence> + <element name="geometryId" type="string" /> + <element name="edges" type="qual:EdgeList" /> + </sequence> + </complexType> + + <complexType name="GE_S_NOT_CLOSED"> + <sequence> + <element name="geometryId" type="string" /> + <element name="edges" type="qual:EdgeList" /> + </sequence> + </complexType> + + <complexType name="GE_S_TOO_FEW_POLYGONS"> + <sequence> + <element name="geometryId" type="string" /> + </sequence> + </complexType> + + <complexType name="GE_S_MULTIPLE_CONNECTED_COMPONENTS"> + <sequence> + <element name="geometryId" type="string" /> + <element name="components" type="qual:ComponentList" /> + </sequence> + </complexType> + + <complexType name="ComponentList"> + <sequence> + <element name="component" type="qual:componentType" + maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="componentType"> + <sequence> + <element name="polygonId" type="string" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE"> + <annotation> + <documentation>A planarity error with a point too far from the + regression plane + </documentation> + </annotation> + <sequence> + <element name="polygonId" type="string" /> + <element name="vertex" type="gml:DirectPositionType" /> + <element name="distance" type="gml:LengthType" /> + </sequence> + </complexType> + + <complexType name="SE_ATTRIBUTE_WRONG_VALUE"> + <sequence> + <element name="childId" type="string" minOccurs="0"/> + <element name="attributeName" type="string" /> + <element name="generic" type="boolean" /> + </sequence> + </complexType> + + <complexType name="SE_ATTRIBUTE_MISSING"> + <sequence> + <element name="childId" type="string" minOccurs="0" /> + <element name="attributeName" type="string" /> + <element name="generic" type="boolean" /> + </sequence> + </complexType> + + <complexType name="validationResultType"> + <annotation> + <documentation>Data structure containing validation results for + features + </documentation> + </annotation> + <sequence> + <element name="GE_R_TOO_FEW_POINTS" + type="qual:GE_R_TOO_FEW_POINTS" minOccurs="0" maxOccurs="unbounded" /> + <element name="GE_R_SELF_INTERSECTION" + type="qual:GE_R_SELF_INTERSECTION" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_R_NOT_CLOSED" type="qual:GE_R_NOT_CLOSED" + minOccurs="0" maxOccurs="unbounded" /> + <element name="GE_R_CONSECUTIVE_POINTS_SAME" + type="qual:GE_R_CONSECUTIVE_POINTS_SAME" minOccurs="0" + maxOccurs="unbounded" /> + + <element name="GE_P_INTERIOR_DISCONNECTED" + type="qual:GE_P_INTERIOR_DISCONNECTED" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_P_INTERSECTING_RINGS" + type="qual:GE_P_INTERSECTING_RINGS" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE" + type="qual:GE_P_NON_PLANAR_POLYGON_DISTANCE_PLANE" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_P_INNER_RINGS_NESTED" + type="qual:GE_P_INNER_RINGS_NESTED" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_P_HOLE_OUTSIDE" + type="qual:GE_P_HOLE_OUTSIDE" minOccurs="0" maxOccurs="unbounded" /> + <element name="GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION" + type="qual:GE_P_NON_PLANAR_POLYGON_NORMALS_DEVIATION" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_P_ORIENTATION_RINGS_SAME" + type="qual:GE_P_ORIENTATION_RINGS_SAME" minOccurs="0" + maxOccurs="unbounded" /> + + <element name="GE_S_ALL_POLYGONS_WRONG_ORIENTATION" + type="qual:GE_S_ALL_POLYGONS_WRONG_ORIENTATION" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_S_POLYGON_WRONG_ORIENTATION" + type="qual:GE_S_POLYGON_WRONG_ORIENTATION" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_S_SELF_INTERSECTION" + type="qual:GE_S_SELF_INTERSECTION" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_S_NON_MANIFOLD_VERTEX" + type="qual:GE_S_NON_MANIFOLD_VERTEX" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_S_NON_MANIFOLD_EDGE" + type="qual:GE_S_NON_MANIFOLD_EDGE" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_S_NOT_CLOSED" type="qual:GE_S_NOT_CLOSED" + minOccurs="0" maxOccurs="unbounded" /> + <element name="GE_S_TOO_FEW_POLYGONS" + type="qual:GE_S_TOO_FEW_POLYGONS" minOccurs="0" + maxOccurs="unbounded" /> + <element name="GE_S_MULTIPLE_CONNECTED_COMPONENTS" + type="qual:GE_S_MULTIPLE_CONNECTED_COMPONENTS" minOccurs="0" + maxOccurs="unbounded" /> + + <element name="SE_ATTRIBUTE_WRONG_VALUE" + type="qual:SE_ATTRIBUTE_WRONG_VALUE" minOccurs="0" + maxOccurs="unbounded" /> + <element name="SE_ATTRIBUTE_MISSING" + type="qual:SE_ATTRIBUTE_MISSING" minOccurs="0" + maxOccurs="unbounded" /> + </sequence> + <attribute name="result" type="qual:result" /> + </complexType> + + <simpleType name="requirementID" final="restriction"> + <annotation> + <documentation>Enumeration for available requirements</documentation> + </annotation> + <restriction base="string"> + <enumeration value="R_GE_R_TOO_FEW_POINTS" /> + <enumeration value="R_GE_R_NOT_CLOSED" /> + <enumeration value="R_GE_R_CONSECUTIVE_POINTS_SAME" /> + <enumeration value="R_GE_R_SELF_INTERSECTION" /> + <enumeration value="R_GE_P_NON_PLANAR" /> + <enumeration value="R_GE_P_INTERIOR_DISCONNECTED" /> + <enumeration value="R_GE_P_INTERSECTING_RINGS" /> + <enumeration value="R_GE_P_HOLE_OUTSIDE" /> + <enumeration value="R_GE_P_ORIENTATION_RINGS_SAME" /> + <enumeration value="R_GE_P_INNER_RINGS_NESTED" /> + <enumeration value="R_GE_S_TOO_FEW_POLYGONS" /> + <enumeration value="R_GE_S_NOT_CLOSED" /> + <enumeration value="R_GE_S_NON_MANIFOLD_EDGE" /> + <enumeration value="R_GE_S_POLYGON_WRONG_ORIENTATION" /> + <enumeration + value="R_GE_S_ALL_POLYGONS_WRONG_ORIENTATION" /> + <enumeration value="R_GE_S_NON_MANIFOLD_VERTEX" /> + <enumeration value="R_GE_S_SELF_INTERSECTION" /> + <enumeration value="R_GE_S_MULTIPLE_CONNECTED_COMPONENTS" /> + <enumeration value="R_SE_ATTRIBUTES_EXISTING" /> + <enumeration value="R_SE_ATTRIBUTES_CORRECT" /> + </restriction> + </simpleType> + + <complexType name="parameter"> + <simpleContent> + <extension base="string"> + <attribute name="name" type="string" use="required" /> + <attribute name="uom" type="string" use="optional" /> + </extension> + </simpleContent> + </complexType> + + <complexType name="requirementType"> + <annotation> + <documentation>Requirement structure for configuration purposes + </documentation> + </annotation> + <sequence> + <element name="parameter" type="qual:parameter" minOccurs="0" + maxOccurs="unbounded" /> + </sequence> + <attribute name="name" type="qual:requirementID" /> + <attribute name="enabled" type="boolean" /> + </complexType> + + <complexType name="validationPlanType"> + <annotation> + <documentation>Validation plan structure containing information about + the parameters used to perform the checks + </documentation> + </annotation> + <sequence> + <element name="globalParameters" + type="qual:globalParameterType" /> + <element name="requirement" type="qual:requirementType" + maxOccurs="unbounded" /> + <element name="filter" type="qual:filterType" minOccurs="1" + maxOccurs="1" /> + </sequence> + </complexType> + + <complexType name="filterType"> + <sequence> + <element name="checking" type="qual:featureType" + minOccurs="0" maxOccurs="unbounded" /> + </sequence> + </complexType> + + <simpleType name="featureType"> + <restriction base="string"> + <enumeration value="BUILDING"></enumeration> + <enumeration value="TRANSPORTATION"></enumeration> + <enumeration value="VEGETATION"></enumeration> + <enumeration value="BRIDGE"></enumeration> + <enumeration value="WATER"></enumeration> + <enumeration value="LAND"></enumeration> + </restriction> + </simpleType> + + <complexType name="globalParameterType"> + <sequence> + <element name="parameter" type="qual:parameter" + maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="statisticsType"> + <annotation> + <documentation>Statistics structure containing information about end + result of checking process + </documentation> + </annotation> + <sequence> + <element name="numErrorBuildings" + type="qual:featureStatistics" /> + <element name="numErrorVegetation" + type="qual:featureStatistics" /> + <element name="numErrorLandObjects" + type="qual:featureStatistics" /> + <element name="numErrorBridgeObjects" + type="qual:featureStatistics" /> + <element name="numErrorWaterObjects" + type="qual:featureStatistics" /> + <element name="numErrorTransportation" + type="qual:featureStatistics" /> + <element name="errorStatistics" + type="qual:errorStatisticsType" /> + </sequence> + </complexType> + + <complexType name="errorStatisticsType"> + <sequence> + <element name="error" type="qual:errorType" minOccurs="0" + maxOccurs="unbounded" /> + </sequence> + </complexType> + + <complexType name="errorType"> + <simpleContent> + <extension base="int"> + <attribute name="name" type="qual:errorId"></attribute> + </extension> + </simpleContent> + </complexType> + + <simpleType name="errorId"> + <restriction base="string"> + <enumeration value="GE_R_TOO_FEW_POINTS" /> + <enumeration value="GE_R_NOT_CLOSED" /> + <enumeration value="GE_R_CONSECUTIVE_POINTS_SAME" /> + <enumeration value="GE_R_SELF_INTERSECTION" /> + <enumeration value="GE_R_NOT_CLOSED" /> + <enumeration value="GE_P_NON_PLANAR" /> + <enumeration value="GE_P_INTERIOR_DISCONNECTED" /> + <enumeration value="GE_P_INTERSECTING_RINGS" /> + <enumeration value="GE_P_HOLE_OUTSIDE" /> + <enumeration value="GE_P_ORIENTATION_RINGS_SAME" /> + <enumeration value="GE_P_INNER_RINGS_NESTED" /> + <enumeration value="GE_S_TOO_FEW_POLYGONS" /> + <enumeration value="GE_S_NOT_CLOSED" /> + <enumeration value="GE_S_NON_MANIFOLD_EDGE" /> + <enumeration value="GE_S_POLYGON_WRONG_ORIENTATION" /> + <enumeration value="GE_S_ALL_POLYGONS_WRONG_ORIENTATION" /> + <enumeration value="GE_S_NON_MANIFOLD_VERTEX" /> + <enumeration value="GE_S_SELF_INTERSECTION" /> + <enumeration value="GE_S_MULTIPLE_CONNECTED_COMPONENTS" /> + <enumeration value="SE_ATTRIBUTE_WRONG_VALUE" /> + <enumeration value="SE_ATTRIBUTE_MISSING" /> + </restriction> + </simpleType> + + <complexType name="featureStatistics"> + <simpleContent> + <extension base="int"> + <attribute name="numChecked" type="int" /> + </extension> + </simpleContent> + </complexType> + + <element name="validation" type="qual:validationType" + substitutionGroup="core:_GenericApplicationPropertyOfCityModel" /> + + <complexType name="validationType"> + <annotation> + <documentation>Data structure containing the validation plan and + statistics of a validation process + </documentation> + </annotation> + <!-- <complexContent> <extension base="gml:AbstractFeatureType"> --> + <sequence> + <element name="validationDate" type="dateTime" /> + <element name="validationSoftware" type="string" /> + <element name="validationPlan" type="qual:validationPlanType" + maxOccurs="1" /> + <element name="statistics" type="qual:statisticsType" + maxOccurs="1" /> + </sequence> + <!-- </extension> </complexContent> --> + </complexType> +</schema> \ No newline at end of file