It's all about the answers!

Ask a question

Trying to Create Requirements using OSLC in 4.0.1


Samanwita Majumdar (5033740) | asked Jan 30 '13, 6:03 a.m.
I am trying to create requirement using OSLC. The artifacts are not getting created if they have Primary Text.
The XML I am trying to post is
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
        xmlns:oslc_rm="http://open-services.net/ns/rm#"
        xmlns:dc="http://purl.org/dc/terms/"
        xmlns:oslc="http://open-services.net/ns/core#"
        xmlns:rm_property="https://ch2dlfi047.in.ibm.com:9450/rm/types/"
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <oslc_rm:Requirement
        rdf:about="">
    <dc:title>My Document for Rich Text 2</dc:title>
    <dc:description>This is a test document created</dc:description>
    <oslc:instanceShape rdf:resource="https://ch2dlfi047.in.ibm.com:9450/rm/types/_ZxxE8loiEeKdy44Rd03Qsw"/>
    <jazz_rm:PrimaryText rdf:parseType="Literal"><div xmlns="http://www.w3.org/1999/xhtml" > <p id="_1359530511630">    <br/>    Test123</p> </div></jazz_rm:PrimaryText>
    </oslc_rm:Requirement>
</rdf:RDF>

and the error is Forbidden although the moment I remove the Primary Text part it works fine.

This is from the OSLC workshop and worked fine in 4.0.1 M3 however fails in 4.0.1 thats mainly because of the property URI for Primary Text which is different in 4.0.1 and coming as - http://jazz.net/ns/rm#PrimaryText

I am using the following method to get the Property URI:

protected String findPropertyByTitle(Document doc, String title) throws Exception {
          
        // based on last Resource shapes changes we need to use dcterms:title to get the property name
        String propertyDefinition = null;
      
         propertyDefinition = "//oslc:Property[dcterms:title=\"" + title +"\"]/oslc:propertyDefinition/@rdf:resource";
      
        XPath xpathNamespace = getXpathNamespace();
        Node node = (Node) xpathNamespace.evaluate(propertyDefinition, doc, XPathConstants.NODE);
        if(node != null){
            return node.getTextContent();
        }
        return null;
    }

Is there any suggestion as to how to work on this?

One answer



permanent link
Gabriel Ruelas (1.1k13) | answered Jan 30 '13, 12:09 p.m.
Hi,

To support the new way primaryText is exposed following method should be changed on the workshop code :

Add following to the Requirement request class :

static final String RM_JAZZ = "rm_jazz";  // Vocabulary Support

and modify following method ( look for Vocabulary support comment )

public void writeXML(Writer out) throws IOException {
        out.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
        out.append("<rdf:RDF\n");
        out.append("\t\txmlns:oslc_rm=\"http://open-services.net/ns/rm#\"\n");
        out.append("\t\txmlns:dc=\"http://purl.org/dc/terms/\"\n");
        out.append("\t\txmlns:oslc=\"http://open-services.net/ns/core#\"\n");
        out.append("\t\txmlns:nav=\"http://jazz.net/ns/rm/navigation#\"\n");
        out.append("\t\txmlns:rm_jazz=\"http://jazz.net/ns/rm#\"\n");      // Vocabulary Support
        out.append("\t\txmlns:rm_property=\"" + rmPropertyURI + "\"\n");
        out.append("\t\txmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n");
        out.append("\t<oslc_rm:Requirement\n");
        if (uri != null) {
            out.append("\t\trdf:about=\""+uri+"\">\n");
        } else {
            out.append(">\n");
        }
       
        //Always need to have a title
        appendXMLAttribute(out, RM_TITLE, dcTitle);
        appendXMLAttribute(out, RM_DESCRIPTION, dcDescription);
        appendXMLAttribute(out, RM_IDENTIFIER, dcIdentifier);       
        appendXMLAttribute(out, RM_CREATOR, dcCreator);
       
        //Always need to specify the shape uri
        out.append("\t<" + INSTANCE_SHAPE + " rdf:resource=\"" + shapeURI + "\"/>\n");
       
        // Append the parent Folder
        if ( this.parentFolder != null) {
            out.append("\t<" + RM_PARENT + " rdf:resource=\"" + this.parentFolder + "\"/>\n");
        }
       
        if(dcModified != null){
            appendXMLAttribute(out, RM_MODIFIED, RFC3339Format.format(dcModified));
        }
       
        //Add internal properties
        for (Iterator<String> iterator = rmLiteralProperties.keySet().iterator(); iterator.hasNext();) {
            String type = iterator.next();
            if ( type == null) // gruelas
                continue;
            // Vocabulary Support
            String xmlTag = null;
            if ( type.equals("http://jazz.net/ns/rm#PrimaryText")) {
                xmlTag = RM_JAZZ + ":" + type.substring(type.lastIndexOf("#") + 1 );
            } else {
                xmlTag = RM_PROPERTY + ":" + type.substring(rmPropertyURI.length());
            }
            out.append("\t<" + xmlTag + " rdf:parseType=\"Literal\">" + rmLiteralProperties.get(type)+ "</" + xmlTag + ">\n");
        }
        for (Iterator<String> iterator = rmResourceProperties.keySet().iterator(); iterator.hasNext();) {
            String type = iterator.next();
            String xmlTag = RM_PROPERTY + ":" + type.substring(rmPropertyURI.length());
            out.append("\t<" + xmlTag + " rdf:resource=\"" + rmResourceProperties.get(type) + "\"/>\n");
        }
       
        out.append("\t</oslc_rm:Requirement>\n");
        out.append("</rdf:RDF>\n");
        out.flush();
    }

Your answer


Register or to post your answer.


Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.