def test_rdf_annotation_element(self):
     should_be = """ 
                 <rdf:RDF>
                     <rdf:Description rdf:about="info:fedora/1">
                         <rdf:type rdf:resource="oa:Annotation"/>
                         <oa:hasBody rdf:resource="body:2"/>
                         <oa:hasTarget rdf:resource="info:fedora/1/SpecificTarget"/>
                         <oa:modelVersion rdf:resource="http://www.openannotation.org/spec/core/20120509.html"/>
                     </rdf:Description>
                     <rdf:Description rdf:about="body:2">
                         <rdf:type rdf:resource="oa:Body"/>
                         <dc:format>text/xml</dc:format>
                     </rdf:Description>
                 </rdf:RDF>
                 """
     rdf = Foxml.get_annotation_rdf_element(pid="1", body_uri="body:2", body_mimetype="text/xml")
 def test_annotation_datastream(self):
     should_be = """
                 <foxml:datastream ID="annotation" FEDORA_URI="info:fedora/1/annotation" STATE="A" CONTROL_GROUP="M">
                   <foxml:datastreamVersion ID="annotation.0" LABEL="" MIMETYPE="text/xml">
                     <foxml:xmlContent>
                       <rdf:RDF>
                         <rdf:Description rdf:about="info:fedora/1">
                           <rdf:type rdf:resource="oa:Annotation"/>
                           <oa:hasBody rdf:resource="body:1"/>
                           <oa:hasTarget rdf:resource="info:fedora/1/SpecificTarget"/>
                           <oa:modelVersion rdf:resource="http://www.openannotation.org/spec/core/20120509.html"/>
                           <oa:generated>{{datetime}}</oa:generated>
                           <oa:annotator>Mac</oa:annotator>
                           <oa:generator>Web</oa:generator>
                           <oa:annotated>{{datetime}}</oa:annotated>
                         </rdf:Description>
                         <rdf:Description rdf:about="1">
                           <rdf:type rdf:resource="oa:Body"/>
                           <dc:format>text/xml</dc:format>
                         </rdf:Description>
                       </rdf:RDF>
                     </foxml:xmlContent>
                   </foxml:datastreamVersion>
                 </foxml:datastream>
                 """
     ele = Foxml.get_annotation_rdf_element(
         pid="1",
         body_uri="body:1",
         oa_selector="/my/xpath",
         body_mimetype="text/xml",
         annotator="Mac",
         generator="Web",
     )
     ds = Foxml.get_xml_datastream(
         element=ele,
         id="annotation",
         mime="application/rdf+xml",
         label="OAC annotation core",
         fedora_uri="info:fedora/1/annotation",
     )
 def test_put(self):
     ele = Foxml.get_annotation_rdf_element(pid='changeme:9', body_uri='changeme:8', body_mimetype='text/xml')
     Fedora.put_datastream(pid='changeme:9', dsid='annotation', element=ele)
    def build_annotation(self):
        self._annotation_pid = Fedora.get_pid()

        foxml = Foxml(pid=self._annotation_pid)
        self._annotation_uri = "info:fedora/%s" % self._annotation_pid

        # Object Properties
        foxml.create_object_properties()
        # Dublin Core Datastream
        dc_uri = "%s/DC" % self._annotation_uri
        dublin_core = Foxml.get_dublin_core_element(pid=self._annotation_pid, title=self._dc_title)
        foxml.create_xml_datastream(
            element=dublin_core,
            id="DC",
            version_id="DC1",
            mime="text/xml",
            label="Dublin Core Record for this object",
            fedora_uri=dc_uri,
            format_uri="http://www.openarchives.org/OAI/2.0/oai_dc/",
        )

        # Inline Body Datastream
        self.body_inline_rdf_element = None
        if self._body_inline is not None:
            self._body_uri = "%s/inlinebody" % self._annotation_uri
            self.body_inline_rdf_element = Foxml.get_body_inline_rdf_element(
                pid=self._annotation_pid, body_uri=self._body_uri, body_inline=self._body_inline
            )
            foxml.create_xml_datastream(
                element=self.body_inline_rdf_element,
                id="inlinebody",
                mime="application/rdf+xml",
                label="Inline Body for OAC annotation",
                fedora_uri=self._body_uri,
            )

        # Annotation Datastream
        anno_uri = "%s/annotation" % self._annotation_uri
        self.annotation_rdf = Foxml.get_annotation_rdf_element(
            pid=self._annotation_pid,
            body_uri=self._body_uri,
            oa_selector=self._oa_selector,
            body_mimetype=self._body_mimetype,
            annotated=self._annotated,
            generator=self._generator,
            annotator=self._annotator,
        )
        foxml.create_xml_datastream(
            element=self.annotation_rdf,
            id="annotation",
            mime="application/rdf+xml",
            label="OAC annotation core",
            fedora_uri=anno_uri,
        )

        # RELS-EXT Datastream
        # This 'get' should never fall back to '' because there is a default annotation content model ('oac:oa-annotation')
        oac_model = app.config.get("DEFUALT_ANNOTATION_CONTENT_MODEL", "")

        # The PID of the SDef object for Annotation Serialization
        # This is not required by Fedora so it was removed.
        # serialization_service = "oac-sdef:serialize"
        # self.rels_ext_rdf_element = Foxml.get_rels_ext_model_element(pid=self._annotation_pid,
        #                                                             models=[oac_model],
        #                                                             services=[serialization_service])
        self.rels_ext_rdf_element = Foxml.get_rels_ext_model_element(pid=self._annotation_pid, models=[oac_model])
        foxml.create_xml_datastream(
            element=self.rels_ext_rdf_element,
            id="RELS-EXT",
            mime="application/rdf+xml",
            label="RDF Statements about this object",
            format_uri="info:fedora/fedora-system:FedoraRELSExt-1.0",
        )

        self.specific_target_rdf_element = None
        self.selector_rdf_element = None
        if self._oa_selector is not None:
            # SpecificTarget Datastream
            sptg_uri = "%s/specifictarget" % self._annotation_uri
            self.specific_target_rdf_element = Foxml.get_specific_target_rdf_element(
                pid=self._annotation_pid, source_uri=self._source_uri, oax_style_uri=self._oax_style_uri
            )
            foxml.create_xml_datastream(
                element=self.specific_target_rdf_element,
                id="specifictarget",
                mime="application/rdf+xml",
                label="SpecificTarget data for OAC annotation",
                fedora_uri=sptg_uri,
            )

            # Selector Datastream
            sele_uri = "%s/selector" % self._annotation_uri
            self.selector_rdf_element = Foxml.get_selector_rdf_element(
                pid=self._annotation_pid,
                oa_selector=self._oa_selector,
                oa_selector_type_uri=self._oa_selector_type_uri,
                fragment_type=self._fragment_type,
            )
            foxml.create_xml_datastream(
                element=self.selector_rdf_element,
                id="selector",
                mime="application/rdf+xml",
                label="Selector data for OAC annotation",
                fedora_uri=sele_uri,
            )

        self._annotation = foxml.get_foxml()