sandygao 2004/04/12 13:13:42 Modified: java/samples/xni PSVIWriter.java Log: Committing Mike Boos' PSVI writer patches to fix various problems. Revision Changes Path 1.27 +101 -40 xml-xerces/java/samples/xni/PSVIWriter.java Index: PSVIWriter.java =================================================================== RCS file: /home/cvs/xml-xerces/java/samples/xni/PSVIWriter.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- PSVIWriter.java 24 Feb 2004 23:41:05 -0000 1.26 +++ PSVIWriter.java 12 Apr 2004 20:13:42 -0000 1.27 @@ -1,12 +1,12 @@ /* * Copyright 1999-2004 The Apache Software Foundation. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -77,7 +77,7 @@ /** * This class is a intersepts XNI events and serialized * XML infoset and Post Schema Validation Infoset. - * + * * @author Arun Yadav,Sun Miscrosystem. * @author Peter McCracken, IBM * @version $Id$ @@ -156,7 +156,7 @@ System.out.println( "Generating Schema Information Set Contribution (PSVI) \n" + "which follow as a consequence of validation and/or assessment."); - + System.out.println("NOTE: Requires use of -s and -v"); System.out.println("Output: generated in " + PSVI_OUTPUT); */ @@ -238,7 +238,7 @@ } // setProperty(String,Object) - /** + /** * Returns the default state for a feature, or null if this * component does not want to report a default value for this * feature. @@ -256,10 +256,10 @@ return null; } // getFeatureDefault(String):Boolean - /** + /** * Returns the default state for a property, or null if this * component does not want to report a default value for this - * property. + * property. * * @param propertyId The property identifier. * @@ -560,7 +560,7 @@ throws XNIException { if (fDocumentHandler == null) return; - + checkForChildren(); sendIndentedElement("element"); sendElementEvent("namespaceName", element.uri); @@ -723,7 +723,7 @@ boolean namespaceAttribute = false; boolean attrElement = false; - int attrCount = attributes == null ? 0 : attributes.getLength(); + int attrCount = attributes == null ? 0 : attributes.getLength(); if (attrCount == 0) { sendEmptyElementEvent("attributes"); @@ -914,7 +914,7 @@ "psv:memberTypeDefinition", elemPSVI.getMemberTypeDefinition()); // A value for nil is not necessary, since we output declaration, instead. - // See http://www.w3.org/TR/xmlschema-1/#section-Element-Declaration-Validation-Rules. + // See http://www.w3.org/TR/xmlschema-1/#section-Element-Declaration-Information-Set-Contributions. sendElementEvent("psv:nil"); sendIndentedElement("psv:declaration"); @@ -1135,7 +1135,13 @@ sendElementEvent( "psv:variety", this.translateContentType(type.getContentType())); - processPSVISimpleTypeDefinition(type.getSimpleType()); + XSSimpleTypeDefinition simpleType = type.getSimpleType(); + if(simpleType == null || (!simpleType.getAnonymous() || fDefined.contains(this.getID(simpleType)))) { + processPSVIElementRef("psv:simpleTypeDefinition", simpleType); + } + else { + processPSVISimpleTypeDefinition(simpleType); + } processPSVIParticle(type.getParticle()); sendUnIndentedElement("psv:contentType"); sendElementEvent( @@ -1249,12 +1255,12 @@ * <psv:annotation xsi:nil="true"/> * <psv:annotation>...</psv:annotation> * </psv:annotations> - * + * * This is because of the way multi-value facet is implemented. It represents * the annotation on each value of the facet, and if a value doesn't have one, * it's corresponding annotation is null. Thus, it's possible for the first * annotation to be null, but the second one to be exist. - * + * * An exception to this is if all of the annotations are null; then I output * <psv:annotations xsi:nil="true"/> */ @@ -1374,7 +1380,7 @@ annot, SchemaSymbols.ELT_DOCUMENTATION, "psv:userInformation"); - processDOMAttributes(annot, "attributes"); + processDOMAttributes(annot); sendUnIndentedElement("psv:annotation"); } } @@ -1407,7 +1413,7 @@ sendUnIndentedElement("children"); //Create XMLAttributes from DOM - Attr[] atts = (Element) node == null ? null : DOMUtil.getAttrs((Element) node); + Attr[] atts = (Element) child == null ? null : DOMUtil.getAttrs((Element) child); XMLAttributes attrs = new XMLAttributesImpl(); for (int i=0; i<atts.length; i++) { Attr att = (Attr)atts[i]; @@ -1416,7 +1422,7 @@ "CDATA" ,att.getValue() ); } - + processAttributes(attrs); sendUnIndentedElement("element"); } @@ -1429,29 +1435,84 @@ } } - private void processDOMAttributes(Element elem, String tagName) { + private void processDOMAttributes(Element elem) { Attr[] atts = elem == null ? null : DOMUtil.getAttrs(elem); - if (atts == null || atts.length == 0) { - sendEmptyElementEvent(tagName); + + boolean namespaceAttribute = false; + boolean attrElement = false; + + int attrCount = atts == null ? 0 : atts.length; + + if (attrCount == 0) { + sendEmptyElementEvent("attributes"); + sendEmptyElementEvent("namespaceAttributes"); + return; + } + + for (int i = 0; i < attrCount; i++) { + Attr att = (Attr)atts[i]; + String localpart = DOMUtil.getLocalName(att); + String prefix = att.getPrefix(); + if (localpart.equals(XMLSymbols.PREFIX_XMLNS) + || prefix.equals(XMLSymbols.PREFIX_XMLNS)) { + namespaceAttribute = true; + continue; + } + if (!attrElement) + sendIndentedElement("attributes"); + + sendIndentedElement("attribute"); + sendElementEvent("namespaceName", DOMUtil.getNamespaceURI(att)); + sendElementEvent("localName", DOMUtil.getLocalName(att)); + sendElementEvent("prefix", att.getPrefix()); + sendElementEvent("normalizedValue", att.getValue()); + sendElementEvent( + "specified", + String.valueOf(att.getSpecified())); + sendElementEvent("attributeType"); + + // this property isn't relevent to PSVI + sendElementEvent("references"); + + sendUnIndentedElement("attribute"); + attrElement = true; + } + if (attrElement) { + sendUnIndentedElement("attributes"); } else { - sendIndentedElement(tagName); - for (int i = 0; i < atts.length; i++) { + sendEmptyElementEvent("attributes"); + } + + if (namespaceAttribute) { + sendIndentedElement("namespaceAttributes"); + for (int i = 0; i < attrCount; i++) { Attr att = (Attr)atts[i]; - sendIndentedElement("attribute"); - sendElementEvent("namespaceName", DOMUtil.getNamespaceURI(att)); - sendElementEvent("localName", DOMUtil.getLocalName(att)); - sendElementEvent("prefix", att.getPrefix()); - sendElementEvent("normalizedValue", att.getValue()); - sendElementEvent("specified", String.valueOf(att.getSpecified())); - sendElementEvent("attributeType"); + String localpart = DOMUtil.getLocalName(att); + String prefix = att.getPrefix(); + if (localpart.equals(XMLSymbols.PREFIX_XMLNS) + || prefix.equals(XMLSymbols.PREFIX_XMLNS)) { + + sendIndentedElement("attribute"); + sendElementEvent("namespaceName", DOMUtil.getNamespaceURI(att)); + sendElementEvent("localName", DOMUtil.getLocalName(att)); + sendElementEvent("prefix", att.getPrefix()); + sendElementEvent("normalizedValue", att.getValue()); + sendElementEvent( + "specified", + String.valueOf(att.getSpecified())); + sendElementEvent("attributeType"); - // this property isn't relevent to PSVI - sendElementEvent("references"); + // this property isn't relevent to PSVI + sendElementEvent("references"); - sendUnIndentedElement("attribute"); + sendUnIndentedElement("attribute"); + } } - sendUnIndentedElement(tagName); + sendUnIndentedElement("namespaceAttributes"); + } + else { + sendEmptyElementEvent("namespaceAttributes"); } } @@ -1758,7 +1819,7 @@ processPSVIElementDeclaration(elem); } } - + private void processPSVIScope( String enclose, XSComplexTypeDefinition enclosingCTD, @@ -1769,7 +1830,7 @@ processPSVITypeDefinitionRef(enclose, enclosingCTD); } } - + private void processPSVIValueConstraint( short constraintType, String constraintValue) { @@ -1781,8 +1842,8 @@ sendElementEvent("psv:value", constraintValue); sendUnIndentedElement("psv:valueConstraint"); } - } - + } + private void processPSVISubstitutionGroupAffiliation(XSElementDeclaration elem) { if (elem.getSubstitutionGroupAffiliation() == null) { sendElementEvent("psv:substitutionGroupAffiliation"); @@ -2102,7 +2163,7 @@ return "unknown"; } } - + private String translateValueConstraintType(short type) { switch (type) { case XSConstants.VC_DEFAULT : @@ -2113,7 +2174,7 @@ return "unknown"; } } - + private String translateBlockOrFinal(short val) { String ret = ""; if ((val & XSConstants.DERIVATION_EXTENSION) != 0) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]