1*b1cdbd2cSJim Jagielski/**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_rdf_XDocumentRepository_idl__
25*b1cdbd2cSJim Jagielski#define __com_sun_star_rdf_XDocumentRepository_idl__
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_beans_Pair_idl__
28*b1cdbd2cSJim Jagielski#include <com/sun/star/beans/Pair.idl>
29*b1cdbd2cSJim Jagielski#endif
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_rdf_XMetadatable_idl__
32*b1cdbd2cSJim Jagielski#include <com/sun/star/rdf/XMetadatable.idl>
33*b1cdbd2cSJim Jagielski#endif
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim Jagielski#ifndef __com_sun_star_rdf_XRepository_idl__
36*b1cdbd2cSJim Jagielski#include <com/sun/star/rdf/XRepository.idl>
37*b1cdbd2cSJim Jagielski#endif
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim Jagielski//=============================================================================
41*b1cdbd2cSJim Jagielski
42*b1cdbd2cSJim Jagielskimodule com {   module sun {   module star {   module rdf {
43*b1cdbd2cSJim Jagielski
44*b1cdbd2cSJim Jagielski//=============================================================================
45*b1cdbd2cSJim Jagielski/** extends <type>XRepository</type> with document-specific functionality.
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski    <p>
48*b1cdbd2cSJim Jagielski    This subclass of <type>XRepository</type> provides some methods which
49*b1cdbd2cSJim Jagielski    only make sense for repositories that are attached to a document.
50*b1cdbd2cSJim Jagielski    For example, the methods allow for manipulating in-content metadata,
51*b1cdbd2cSJim Jagielski    which is stored as RDFa.
52*b1cdbd2cSJim Jagielski    </p>
53*b1cdbd2cSJim Jagielski
54*b1cdbd2cSJim Jagielski    @since OpenOffice 3.2
55*b1cdbd2cSJim Jagielski
56*b1cdbd2cSJim Jagielski    @see XRepositorySupplier
57*b1cdbd2cSJim Jagielski    @see XDocumentMetadataAccess
58*b1cdbd2cSJim Jagielski */
59*b1cdbd2cSJim Jagielskiinterface XDocumentRepository : XRepository
60*b1cdbd2cSJim Jagielski{
61*b1cdbd2cSJim Jagielski
62*b1cdbd2cSJim Jagielski    //-------------------------------------------------------------------------
63*b1cdbd2cSJim Jagielski    /** update the RDFa statement(s) that correspond to an ODF element in the
64*b1cdbd2cSJim Jagielski        repository.
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski        <p>
67*b1cdbd2cSJim Jagielski        This method will do the following steps:
68*b1cdbd2cSJim Jagielski        <ol>
69*b1cdbd2cSJim Jagielski        <li>Remove all previously set RDFa statements for the Object parameter
70*b1cdbd2cSJim Jagielski             from the repository</li>
71*b1cdbd2cSJim Jagielski        <li>If the RDFaContent parameter is the empty <atom>string</atom>,
72*b1cdbd2cSJim Jagielski            for every Predicate in the given list of Predicates,
73*b1cdbd2cSJim Jagielski            add the following RDF statement to an unspecified named graph:
74*b1cdbd2cSJim Jagielski            <ul>
75*b1cdbd2cSJim Jagielski            <li><code>Subject Predicate
76*b1cdbd2cSJim Jagielski                      XLiteral(Object->getText()^^RDFaDatatype)</code></li>
77*b1cdbd2cSJim Jagielski            </ul>
78*b1cdbd2cSJim Jagielski        </li>
79*b1cdbd2cSJim Jagielski        <li>If the RDFaContent parameter is not the empty <atom>string</atom>,
80*b1cdbd2cSJim Jagielski            for every Predicate in the given list of Predicates,
81*b1cdbd2cSJim Jagielski            add the following RDF statement to an unspecified named graph:
82*b1cdbd2cSJim Jagielski            <ul>
83*b1cdbd2cSJim Jagielski            <li>
84*b1cdbd2cSJim Jagielski            <code>Subject Predicate XLiteral(RDFaContent^^RDFaDatatype)</code>
85*b1cdbd2cSJim Jagielski            </li>
86*b1cdbd2cSJim Jagielski            </ul>
87*b1cdbd2cSJim Jagielski        </li>
88*b1cdbd2cSJim Jagielski        </ol>
89*b1cdbd2cSJim Jagielski        </p>
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski        <p>
92*b1cdbd2cSJim Jagielski        RDFa statements are handled specially because they are not logically
93*b1cdbd2cSJim Jagielski        part of any named graph in the repository.
94*b1cdbd2cSJim Jagielski        Also, they have rather unusual semantics;
95*b1cdbd2cSJim Jagielski        just using <member>XNamedGraph::addStatement</member> would be
96*b1cdbd2cSJim Jagielski        ambiguous:
97*b1cdbd2cSJim Jagielski        if the object is a <type>XMetadatable</type>, do we insert
98*b1cdbd2cSJim Jagielski        the object itself (URI) or its literal content (RDFa)?
99*b1cdbd2cSJim Jagielski        </p>
100*b1cdbd2cSJim Jagielski
101*b1cdbd2cSJim Jagielski        @param Subject
102*b1cdbd2cSJim Jagielski            the subject of the RDF triple(s).
103*b1cdbd2cSJim Jagielski
104*b1cdbd2cSJim Jagielski        @param Predicates
105*b1cdbd2cSJim Jagielski            the predicates of the RDF triple(s).
106*b1cdbd2cSJim Jagielski
107*b1cdbd2cSJim Jagielski        @param Object
108*b1cdbd2cSJim Jagielski            the object of the RDF triple(s) is the text content of this
109*b1cdbd2cSJim Jagielski            parameter.
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski        @param RDFaContent
112*b1cdbd2cSJim Jagielski            the <code>rdfa:content</code> attribute (may be the empty
113*b1cdbd2cSJim Jagielski            <atom>string</atom>).
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski        @param RDFaDatatype
116*b1cdbd2cSJim Jagielski            the <code>rdfa:datatype</code> attribute (may be <NULL/>)
117*b1cdbd2cSJim Jagielski
118*b1cdbd2cSJim Jagielski        @throws com::sun::star::lang::IllegalArgumentException
119*b1cdbd2cSJim Jagielski            if any parameter is <NULL/>, Predicates is empty,
120*b1cdbd2cSJim Jagielski            or Object is of a type that can not have RDFa metadata attached.
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski        @throws RepositoryException
123*b1cdbd2cSJim Jagielski            if an error occurs when accessing the repository.
124*b1cdbd2cSJim Jagielski     */
125*b1cdbd2cSJim Jagielski    void setStatementRDFa(
126*b1cdbd2cSJim Jagielski            [in] XResource Subject,
127*b1cdbd2cSJim Jagielski            [in] sequence<XURI> Predicates,
128*b1cdbd2cSJim Jagielski            [in] XMetadatable Object,
129*b1cdbd2cSJim Jagielski            [in] string RDFaContent,
130*b1cdbd2cSJim Jagielski            [in] XURI RDFaDatatype)
131*b1cdbd2cSJim Jagielski        raises( com::sun::star::lang::IllegalArgumentException,
132*b1cdbd2cSJim Jagielski                RepositoryException );
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski    //-------------------------------------------------------------------------
135*b1cdbd2cSJim Jagielski    /** remove the RDFa statement(s) that correspond to an ODF element from the
136*b1cdbd2cSJim Jagielski        repository.
137*b1cdbd2cSJim Jagielski
138*b1cdbd2cSJim Jagielski        <p>
139*b1cdbd2cSJim Jagielski        RDFa statements are handled specially because they are not logically
140*b1cdbd2cSJim Jagielski        part of any graph.
141*b1cdbd2cSJim Jagielski        </p>
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski        @param Element
144*b1cdbd2cSJim Jagielski            the element whose RDFa statement(s) should be removed
145*b1cdbd2cSJim Jagielski
146*b1cdbd2cSJim Jagielski        @throws com::sun::star::lang::IllegalArgumentException
147*b1cdbd2cSJim Jagielski            if the given Element is <NULL/>, or of a type that can not have
148*b1cdbd2cSJim Jagielski            RDFa metadata attached.
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski        @throws RepositoryException
151*b1cdbd2cSJim Jagielski            if an error occurs when accessing the repository.
152*b1cdbd2cSJim Jagielski     */
153*b1cdbd2cSJim Jagielski    void removeStatementRDFa([in] XMetadatable Element)
154*b1cdbd2cSJim Jagielski        raises( com::sun::star::lang::IllegalArgumentException,
155*b1cdbd2cSJim Jagielski                RepositoryException );
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski    //-------------------------------------------------------------------------
158*b1cdbd2cSJim Jagielski    /** find the RDFa statement(s) associated with an ODF element.
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski        @param Element
161*b1cdbd2cSJim Jagielski            the ODF element for which RDFa statements should be found
162*b1cdbd2cSJim Jagielski
163*b1cdbd2cSJim Jagielski        @returns
164*b1cdbd2cSJim Jagielski            <ul>
165*b1cdbd2cSJim Jagielski            <li>if the element has no RDFa meta-data attributes:
166*b1cdbd2cSJim Jagielski                the empty sequence.</li>
167*b1cdbd2cSJim Jagielski            <li>if the element has RDFa meta-data attributes:
168*b1cdbd2cSJim Jagielski                <ul>
169*b1cdbd2cSJim Jagielski                <li>a sequence with the RDFa-statements corresponding to the
170*b1cdbd2cSJim Jagielski                attributes.</li>
171*b1cdbd2cSJim Jagielski                <li>a flag indicating whether there is a xhtml:content
172*b1cdbd2cSJim Jagielski                attribute.</li>
173*b1cdbd2cSJim Jagielski                </ul>
174*b1cdbd2cSJim Jagielski            </li>
175*b1cdbd2cSJim Jagielski            </ul>
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski        @throws com::sun::star::lang::IllegalArgumentException
178*b1cdbd2cSJim Jagielski            if the given Element is <NULL/>, or of a type that can not have
179*b1cdbd2cSJim Jagielski            RDFa metadata attached.
180*b1cdbd2cSJim Jagielski
181*b1cdbd2cSJim Jagielski        @throws RepositoryException
182*b1cdbd2cSJim Jagielski            if an error occurs when accessing the repository.
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski        @see Statement
185*b1cdbd2cSJim Jagielski     */
186*b1cdbd2cSJim Jagielski    com::sun::star::beans::Pair< sequence<Statement>, boolean >
187*b1cdbd2cSJim Jagielski            getStatementRDFa([in] XMetadatable Element)
188*b1cdbd2cSJim Jagielski        raises( com::sun::star::lang::IllegalArgumentException,
189*b1cdbd2cSJim Jagielski                RepositoryException );
190*b1cdbd2cSJim Jagielski
191*b1cdbd2cSJim Jagielski    //-------------------------------------------------------------------------
192*b1cdbd2cSJim Jagielski    /** gets matching RDFa statements from the repository.
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski        <p>
195*b1cdbd2cSJim Jagielski        This method exists because RDFa statements are not part of any named
196*b1cdbd2cSJim Jagielski        graph, and thus they cannot be enumerated with
197*b1cdbd2cSJim Jagielski        <member>XNamedGraph::getStatements</member>.
198*b1cdbd2cSJim Jagielski        </p>
199*b1cdbd2cSJim Jagielski
200*b1cdbd2cSJim Jagielski        <p>
201*b1cdbd2cSJim Jagielski        Any parameter may be <NULL/>, which acts as a wildcard.
202*b1cdbd2cSJim Jagielski        For example, to get all statements about myURI:
203*b1cdbd2cSJim Jagielski        <code>getStatementsRDFa(myURI, null, null)</code>
204*b1cdbd2cSJim Jagielski        </p>
205*b1cdbd2cSJim Jagielski
206*b1cdbd2cSJim Jagielski        @param Subject
207*b1cdbd2cSJim Jagielski            the subject of the RDF triple.
208*b1cdbd2cSJim Jagielski
209*b1cdbd2cSJim Jagielski        @param Predicate
210*b1cdbd2cSJim Jagielski            the predicate of the RDF triple.
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski        @param Object
213*b1cdbd2cSJim Jagielski            the object of the RDF triple.
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski        @returns
216*b1cdbd2cSJim Jagielski            an iterator over all RDFa statements in the repository that match
217*b1cdbd2cSJim Jagielski            the parameters, represented as an
218*b1cdbd2cSJim Jagielski            enumeration of <type>Statement</type>
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski        @throws RepositoryException
221*b1cdbd2cSJim Jagielski            if an error occurs when accessing the repository.
222*b1cdbd2cSJim Jagielski
223*b1cdbd2cSJim Jagielski        @see Statement
224*b1cdbd2cSJim Jagielski        @see XRepository::getStatements
225*b1cdbd2cSJim Jagielski        @see XNamedGraph::getStatements
226*b1cdbd2cSJim Jagielski     */
227*b1cdbd2cSJim Jagielski    com::sun::star::container::XEnumeration/*<Statement>*/ getStatementsRDFa(
228*b1cdbd2cSJim Jagielski            [in] XResource Subject,
229*b1cdbd2cSJim Jagielski            [in] XURI Predicate,
230*b1cdbd2cSJim Jagielski            [in] XNode Object)
231*b1cdbd2cSJim Jagielski        raises( RepositoryException );
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski};
234*b1cdbd2cSJim Jagielski
235*b1cdbd2cSJim Jagielski//=============================================================================
236*b1cdbd2cSJim Jagielski
237*b1cdbd2cSJim Jagielski}; }; }; };
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski#endif
240