[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.modeling.m2m] Re: QVT XSD

Hi Min,

I'm not quite familiar with XSDResourceImpl but seems that your case somehow depends on ones behavior. Namely on XSDResourceImpl.serialize(..) impl.

For your case just try to specify output URI with file extension differ from ".xsd" (for example ".xsde"). That way I've got the following output:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:XSDSchema xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"; xmlns:xsd="http://www.eclipse.org/xsd/2002/XSD"; argetNamespace="DUMMY"/>



Regards, Sergey.

Min wrote:
Hi,

1. QVT -

Executing the following .qvto :

   modeltype INTEROP uses "http://ms.com/interop";;
   modeltype XSD uses "http://www.eclipse.org/xsd/2002/XSD";;

transformation interop2xsd(in interop: INTEROP , out XSD);
main(in interopModel: INTEROP::InteropSchema, out xsd: XSD::XSDSchema) {
xsd:= interopModel.map interop2Xsd();
}


   mapping INTEROP::InteropSchema::interop2Xsd() : XSD::XSDSchema {
    targetNamespace := 'DUMMY';
   }

with OUT target file specifies as <something>.xsd, produces:

   <?xml version="1.0" encoding="UTF-8"?>
   <schema targetNamespace="DUMMY"/>

which does not look like a valid xsd schema root element.

2. Java-
On the other hand, running the following Java code:

   class Schema {

private XSDFactory _xsdFactory;
private XSDSchema _schema;
private ByteArrayOutputStream _outputStream = new ByteArrayOutputStream();
private Schema() {
_xsdFactory = XSDFactory.eINSTANCE;
initSchema(); }
private void initSchema() {
_schema = _xsdFactory.createXSDSchema();
_schema.setTargetNamespace("DUMMY");
_schema.setSchemaForSchemaQNamePrefix("xsd");
Map<String, String> qNamePrefixToNamespaceMap =_schema.getQNamePrefixToNamespaceMap();
qNamePrefixToNamespaceMap.put("tns", _schema.getTargetNamespace());
qNamePrefixToNamespaceMap.put(_schema.getSchemaForSchemaQNamePrefix(), XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001);
_schema.updateElement();
}
private String serialize() {
XSDResourceImpl.serialize(_outputStream, _schema.getDocument());
return _outputStream.toString();
}
public static void main(String [ ] args) {
Schema schema = new Schema();
System.out.println(schema.serialize());
}
}


produces, in stdout:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:tns="DUMMY" xmlns:xsd="http://www.w3.org/2001/XMLSchema"; targetNamespace="DUMMY"/>


which looks like a valid xsd schema document root.


3. Question: how would one achieve the equivalence of 2. above,
with a QVT transform? I.e., how would one re-write the .qvto in 1. to get the output produced in 2. ?



Thanks.

-Min