Pergunta

Eu estou fazendo um organizador pessoal para fins de aprendizagem, e eu nunca trabalhei com XML, então eu não tenho certeza se a minha solução é a melhor. Aqui está a estrutura básica para o arquivo XML i veio com:

<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>

O atributo de urgência deve ser em uma escala de 1 a 10.
Eu fiz uma busca rápida no google e não poderia encontrar um bom exemplo. Talvez não seja a melhor solução, e eu gostaria de saber se a sua adequada. Eu estou fazendo a aplicação em PHP se isso tem alguma relevância.

Foi útil?

Solução

A sua forma é bastante adequado para mim. No entanto, eu prefiro tags filhas para atributos, então meu caminho seria mais parecido com:

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

Mas como eu disse, o seu caminho é apenas multa.

Pergunta rápida, embora - por que não um banco de dados

Outras dicas

Você pode ter chegado a esta ingenuamente, mas a característica principal do seu projeto XML é que ele é otimizado para pesquisar por data. Se o documento XML é grande, e você faz um monte de pesquisar por data (que eu suspeito é o caso mais uso comum em um organizador pessoal), isso é uma coisa boa.

Ao executar este padrão XPath:

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

examinará muitos menos nós do que vontade usando o padrão que você precisa para usar com simples organização achatada-out de Kev:

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

que basicamente tem que olhar para cada nó no documento.

Note, a propósito, que eu estou supondo que os atributos month e day são numéricos. Isto é importante porque você quase certamente deseja classificar esses dados em algum momento, e se você estiver indo para manter a ordem de classificação no documento (que, admito, um argumento pode ser feito para), você' vai querer esses atributos em uma forma que é fácil classificá-los em.

Também é importante que você é consistente em como você armazena os dados numéricos nesses atributos. (Se você quer soar inteligente em reuniões, você pode dizer que você está estabelecendo representações canônicas de seus tipos de dados.) Se você usar zeros à esquerda algumas vezes e não outras, por exemplo, nenhum desses padrões XPath irá funcionar de forma confiável, porque @day='7' não irá corresponder a um conjunto de atributos day para "07". (Você pode contornar isso, convertendo os atributos para números em seu XPath usando a função number(), mas evitar o problema em primeiro lugar é melhor.)

Você poderia achatar isso para baixo hierarquia para:

<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>

ou ..

<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>

Seria tornar a vida um pouco menos dolorosa fazendo consultas XPath. Eu também adicionei um atributo id para que você possa identificar exclusivamente uma atividade.

Eu acho que sua estrutura será bom para o que você está fazendo.

Se você está planejando para usar esta parte para aprender sobre XML, você pode considerar o uso de uma combinação de atributos e elementos para que você obtenha prática trabalhar com coleções de cada um. Uma vez que você está mais confortável com XML, você provavelmente vai começar a definir regras que você vai usar para determinar quais propriedades tornam-se atributos e as propriedades que se tornam elementos.

Com o código certo, você pode mover informações e para trás entre os arquivos XML e tabelas de banco de dados. Você também pode começar a aprender XSL de modo que você pode praticar mover as coisas sem alterar o original arquivo XML (ou, uma vez que os dados estão em uma mesa, nem mesmo tem um arquivo XML original).

Pode valer a pena olhar para xcal , uma representação XML compatível com o iCalendar standard, para algumas idéias potencialmente bem-pensado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top