En los siguientes ejemplos se asume que $compañía es la raíz de un árbol de objetos de datos creados desde el esquema y el documento de instancia mostrado arriba.
Ejemplo #1 Acceso mediante el nombre de la propiedad
Se puede acceder a las propiedades de los objetos de datos usando la sintaxis de acceso de la propiedad del objeto. Lo siguiente esteblece el nombre de la compañía a 'Acme'.
<?php
$compañía->nombre = 'Acme';
?>
Ejemplo #2 Acceso mediante el nombre de la propiedad como índice de array
También se puede acceder a las propiedades usando la sintaxis de array asociativos. La forma más sencilla utiliza el nombre de la propiedad como el índice de array. Por ejemplo, lo siguiente establece el nombre de la compañía y objtiene el empleadoDelMes.
<?php
$compañía['nombre'] = 'UltraCorp';
$edm = $compañía['empleadoDelMes'];
?>
Ejemplo #3 Iteración de Objetos de Datos
Se puede iterar a través de las propiedades de un objeto de datos usando foreach. Lo siguiente itera a través de las propiedades del empleado del mes.
<?php
$edm = $compañía->empleadoDelMes;
foreach ($edm as $nombre => $valor) {
echo "$nombre: $valor\n";
}
?>
lo que imprimirá:
nombre: Jane Doe NS: E0003
La propiedad 'director' no se muestra a causa de que no ha sido establecida.
Ejemplo #4 Acceso a propiedades polievaluadas mediante del nombre
Se puede acceder a las propiedaes de un objeto de datos polievaluado usando la sintaxis del nombre de la propiedad del objeto. Lo siguiente obtiene la lista de departamentos.
<?php
$departamentos = $compañía->departamentos;
?>
Ejemplo #5 Acceso a elementos de propiedades polievaluadas
Se puede acceder a elementos de propiedades polievaluadas usando la sintaxis de array. Lo siguiente accede al primer departamento de la compañía.
<?php
$dpto_ta = $compañía->departamentos[0];
?>
Ejemplo #6 Iteración de propiedades polievaluadas
Las propiedades polievaluadas también se pueden iterar usando foreach. Lo siguiente itera a través de los departamentos de la compañía.
<?php
foreach ($compañía->departamentos as $departamento) {
// ...
}
?>
Cada iteración asignará el siguiente departamento de la lista a la variable $departamento.
Ejemplo #7 Acceso a propiedades encadenadas
Se pueden encadenar referencias de propiedades en una única línea. Lo siguiente establece y obtiene el nombre del primer departamento.
<?php
$compañía->departamentos[0]->nombre = 'Tecnologías Emergentes';
$nombre_dpto = $compañía->departamentos[0]->nombre;
?>
Usar la sintaxis de array asociativo, esto es equivalente a
<?php
$compañía['departamentos'][0]['nombre'] = 'Tecnologías Emergentes';
$nombre_dpto = $compañía['departamentos'][0]['nombre'];
?>
En cualquier caso, la variable nombre_dpto es establecida a 'Tecnologías Emergentes'.
Ejemplo #8 Navegación XPath
El índice del un array asociativo puede ser una expresión similar a XPath. Las expresiones válidas están definidas por un subconjunto incrementado de XPath.
Las dos formas de indexar propiedades polievaluadas están soportadas. La primera es la sintaxis de array estándar de XPath con el índice comenzando por cero, la segunda es una extensión de SDO para XPath con un índice comenzando por cero. La sintaxis estándar es:
<?php
$jane_doe = $compañía["departamentos[1]/empleados[2]"];
?>
y la sintaxis de extensión de XPath de SDO es:
<?php
$jane_doe = $compañía["departamentos.0/empleados.1"];
?>
Ambos ejemplos obtienen el segundo empleado del primer departamento.
Ejemplo #9 Consulta XPath
Se puede usar XPath para consultar e identificar partes de un objeto de datos basado en datos de instancia. Lo siguiente recupera el director del departamento 'Tecnologías Avanzadas'.
<?php
$director_ta =
$compañía["departamentos[nombre='Tecnologías Avanzadas']/empleados[director=true]"];
?>
Ejemplo #10 Crear objetos de datos hijos
Un objeto de datos puede ser una fábrica para sus objetos de datos hijos. Un objeto de datos hijo es automáticamente parte del grafo de datos. Lo siguiente añade un nuevo empleado al departamento 'Tecnologías Avanzadas'.
<?php
$dpto_ta = $compañía["departamentos[nombre='Tecnologías Avanzadas']"];
$nuevo_contrato = $dpto_ta->createDataObject('empleados');
$nuevo_contrato->nombre = 'John Johnson';
$nuevo_contrato->NS = 'E0005';
$nuevo_contrato->director = false;
?>
Ejemplo #11 Desestablecer una propiedad primitiva
Se pueden usar las funciones isset() y unset() para comprobar y eliminar elementos de un objeto de datos.
Lo siguiente limpia el nombre del primer departamento.
<?php
unset($compañía->departamentos[0]->nombre);
?>
Ejemplo #12 Desestablecer un objeto de datos
unset también se puede usar para eliminar un objeto de datos de un árbol. El siguiente ejemplo muestra a John Jones abandonando la compañía.
<?php
unset($compañía->departamentos[0]->empleados[0]);
?>
Ejemplo #13 Desestablecer un objeto de datos referenciado
Lo siguiente elimina el 'empleadoDelMes' de la compañía. Si esto fuera una relación de contención el empleado sería removido de la compañía (¡probablemente no es una buena idea echar al mejor empleado de cada mes!), pero ya que esta es una referencia de no contención, el empleado que está siendo referenciado permanecerá en el departamento de la compañía, pero ya no será accesible mediante la propiedad empleadoDelMes.
<?php
if (isset($compañía->empleadoDelMes)) {
unset($compañía->empleadoDelMes);
}
?>
Ejemplo #14 Acceso mediante índice de propiedad
Se puede acceder a las propiedades de objetos de datos mediante sus ídices de propiedad usando la sintaxis de array. El índice de propiedad es la posición en la que la definición de la propiedad aparece en el modelo (en este caso el esquema xml). Se puede ver en el esquema listado arriba que el atributo nombre de la compañía es la segunda propiedad de la compañía (la interfaz de SDO no hace distinción entre atributos XML y elementos). Lo siguiente establece el nombre de la compañía a 'Acme', con el mismo resultado que en el Acceso mediante el nombre de la propiedad
<?php
$compañía[1] = 'Acme';
?>
Usar directamente el índice de esta manera puede ser delicado. Normalmente se debería prefereir la sintaxis de nombre de propiedad, aunque el índeice de propiedad puede ser necesario en casos especiales.