def test_selector_datastream(self):
     should_be = """
                 <foxml:datastream ID="selector" FEDORA_URI="info:fedora/1/selector" STATE="A" CONTROL_GROUP="M">
                   <foxml:datastreamVersion ID="selector.0" LABEL="Selector data for OAC annotation" MIMETYPE="application/rdf+xml">
                     <foxml:xmlContent>
                       <rdf:RDF>
                         <rdf:Description rdf:about="info:fedora/{{ANNO1_PID}}/selector">
                           <rdf:type rdf:resource="oa:FragmentSelector"/>
                           <rdf:value>/my/xpath/</rdf:value>
                         </rdf:Description>
                       </rdf:RDF>
                     </foxml:xmlContent>
                   </foxml:datastreamVersion>
                 </foxml:datastream>
                 """
     ele = Foxml.get_selector_rdf_element(
         pid="1", oa_selector="/my/xpath/", oa_selector_type_uri="oa:FragmentSelector"
     )
     ds = Foxml.get_xml_datastream(
         element=ele,
         id="selector",
         mime="application/rdf+xml",
         label="Selector data for OAC annotation",
         fedora_uri="info:fedora/1/selector",
     )
    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()