Pregunta

Estoy haciendo un organizador personal con fines de aprendizaje, y nunca he trabajado con XML, así que no estoy seguro de si mi solución es la mejor. Aquí está la estructura básica para el archivo XML con el que venía:

<calendar>
    <year value="2008">
        <month value="october">
            <day value="16">
                <activity name="mike's birthday" time="21:00" address="mike's apartment" urgency="10">
                     activity description.
                </activity>
            </day>
        </month>
    </year>
</calendar>

El atributo de urgencia debe estar en una escala de 1 a 10.
Hice una búsqueda rápida en google y no pude encontrar un buen ejemplo. Tal vez esa no sea la mejor solución, y me gustaría saber si es adecuada. Estoy haciendo la aplicación en PHP si eso tiene alguna relevancia.

¿Fue útil?

Solución

Tu camino es bastante adecuado para mí. Sin embargo, prefiero las etiquetas de niños a los atributos, por lo que mi camino sería más como:

<activity>
  <name>Mike's Birthday</name>
  <time>2100</time>
  <address>Mike's Place</address>
  <urgency>10</urgency>
  <description>activity description</description>
</activity>

Pero como dije, tu camino está bien.

Pregunta rápida, sin embargo, ¿por qué no una base de datos?

Otros consejos

Es posible que haya llegado a esto ingenuamente, pero la característica principal de su diseño XML es que está optimizado para la búsqueda por fecha. Si su documento XML es grande y realiza muchas búsquedas por fecha (que sospecho que es el caso de uso más común en un organizador personal), esto es algo bueno.

Ejecutando este patrón XPath:

/calendar/year[@value='2008']/month[@value='10']/day[@value='7']/activity

examinará muchos menos nodos que el que usaría el patrón que necesitaría usar con la organización más plana de Kev:

/calendar/activity[@year='2008' and @month='10' and @day='7']

que básicamente tiene que mirar cada nodo en el documento.

Tenga en cuenta, por cierto, que estoy asumiendo que los atributos mes y day son numéricos. Esto es importante porque seguramente querrá ordenar estos datos en algún momento y, a menos que mantenga el orden de clasificación en el documento (lo cual, admito, se puede hacer un argumento), usted ' querrá esos atributos en una forma en la que sea fácil clasificarlos.

También es importante que sea coherente en la forma en que almacena los datos numéricos en esos atributos. (Si quiere parecer inteligente en las reuniones, puede decir que está estableciendo representaciones canónicas de sus tipos de datos). Si usa ceros a la izquierda algunas veces y no otras, por ejemplo, ninguno de esos patrones XPath funcionará de manera confiable, porque @ day = '7' no coincidirá con un atributo day establecido en " 07 " . (Puede evitar eso convirtiendo los atributos en números en su XPath usando la función number () , pero evitar el problema en primer lugar es mejor).

Puedes aplanar esa jerarquía hasta:

<calendar>
    <activity
        id="123456"
        name="mike's birthday" 
        year="2008"
        month="10"
        day="16"
        time="21:00" 
        address="mike's apartment" 
        urgency="10">
            activity description.
        </activity>
</calendar>

o ..

<calendar>
    <activity id="12345">
        <name>mike's birthday</name>
        <year>2008</year>
        <month>10<month>
        <day>16</day>
        <time>21:00</time>
              <urgency>10</urgency>
        <address>mike's apartment<address>
        <description>activity description.</description>
    </activity>
</calendar>

Haría la vida un poco menos dolorosa al hacer consultas XPath. También agregué un atributo de identificación para que pueda identificar una actividad de forma única.

Creo que tu estructura estará bien para lo que estás haciendo.

Si planea usar esto en parte para aprender sobre XML, puede considerar usar una combinación de atributos y elementos para que practique el trabajo con colecciones de cada uno. Una vez que se sienta más cómodo con XML, probablemente comenzará a definir las reglas que usará para determinar qué propiedades se convierten en atributos y qué propiedades se convierten en elementos.

Con el código correcto, puede mover información de un lado a otro entre archivos XML y tablas de bases de datos. También puede comenzar a aprender XSL para que pueda practicar mover cosas sin cambiar el original Archivo XML (o, una vez que los datos están en una tabla, ni siquiera tienen un archivo XML original).

Podría valer la pena ver xCal , una representación compatible con XML de la iCalendar estándar, para algunas ideas potencialmente bien pensadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top