comparison rdf/RDFImporter.cpp @ 510:af7b6e55895b

* Ensure text models are exported with text properties in RDF, and imported back into text models again (instead of time/value models)
author Chris Cannam
date Mon, 08 Dec 2008 11:53:10 +0000
parents 1b8c748fd7ea
children e340b2fb9471
comparison
equal deleted inserted replaced
509:6066bde1c126 510:af7b6e55895b
28 28
29 #include "data/model/SparseOneDimensionalModel.h" 29 #include "data/model/SparseOneDimensionalModel.h"
30 #include "data/model/SparseTimeValueModel.h" 30 #include "data/model/SparseTimeValueModel.h"
31 #include "data/model/EditableDenseThreeDimensionalModel.h" 31 #include "data/model/EditableDenseThreeDimensionalModel.h"
32 #include "data/model/NoteModel.h" 32 #include "data/model/NoteModel.h"
33 #include "data/model/TextModel.h"
33 #include "data/model/RegionModel.h" 34 #include "data/model/RegionModel.h"
34 #include "data/model/WaveFileModel.h" 35 #include "data/model/WaveFileModel.h"
35 36
36 #include "data/fileio/FileSource.h" 37 #include "data/fileio/FileSource.h"
37 38
564 " <%2> rdfs:label ?label . " 565 " <%2> rdfs:label ?label . "
565 " } " 566 " } "
566 567
567 ).arg(m_uristring); 568 ).arg(m_uristring);
568 569
570 QString textQueryString = prefixes + QString(
571
572 " SELECT ?label FROM <%1> "
573 " WHERE { "
574 " <%2> af:text ?label . "
575 " } "
576
577 ).arg(m_uristring);
578
569 SimpleSPARQLQuery query(s, queryString); 579 SimpleSPARQLQuery query(s, queryString);
570 query.setProgressReporter(reporter); 580 query.setProgressReporter(reporter);
571 581
572 // cerr << "Query will be: " << queryString.toStdString() << endl; 582 // cerr << "Query will be: " << queryString.toStdString() << endl;
573 583
624 RealTime duration; 634 RealTime duration;
625 635
626 bool haveTime = false; 636 bool haveTime = false;
627 bool haveDuration = false; 637 bool haveDuration = false;
628 638
629 QString label = SimpleSPARQLQuery::singleResultQuery 639 QString label = "";
630 (s, labelQueryString.arg(thinguri), "label").value; 640 bool text = (type.contains("Text") || type.contains("text")); // Ha, ha
641
642 if (text) {
643 label = SimpleSPARQLQuery::singleResultQuery
644 (s, textQueryString.arg(thinguri), "label").value;
645 }
646
647 if (label == "") {
648 label = SimpleSPARQLQuery::singleResultQuery
649 (s, labelQueryString.arg(thinguri), "label").value;
650 }
631 651
632 SimpleSPARQLQuery rangeQuery(s, rangeQueryString.arg(thinguri)); 652 SimpleSPARQLQuery rangeQuery(s, rangeQueryString.arg(thinguri));
633 SimpleSPARQLQuery::ResultList rangeResults = rangeQuery.execute(); 653 SimpleSPARQLQuery::ResultList rangeResults = rangeQuery.execute();
634 if (!rangeResults.empty()) { 654 if (!rangeResults.empty()) {
635 // std::cerr << rangeResults.size() << " range results" << std::endl; 655 // std::cerr << rangeResults.size() << " range results" << std::endl;
680 700
681 if (!haveDuration) { 701 if (!haveDuration) {
682 702
683 if (dimensions == 1) { 703 if (dimensions == 1) {
684 704
685 // std::cerr << "SparseOneDimensionalModel" << std::endl; 705 if (text) {
686 model = new SparseOneDimensionalModel(m_sampleRate, 1, false); 706
707 model = new TextModel(m_sampleRate, 1, false);
708
709 } else {
710
711 model = new SparseOneDimensionalModel(m_sampleRate, 1, false);
712 }
687 713
688 } else if (dimensions == 2) { 714 } else if (dimensions == 2) {
689 715
690 // std::cerr << "SparseTimeValueModel" << std::endl; 716 if (text) {
691 model = new SparseTimeValueModel(m_sampleRate, 1, false); 717
718 model = new TextModel(m_sampleRate, 1, false);
719
720 } else {
721
722 model = new SparseTimeValueModel(m_sampleRate, 1, false);
723 }
692 724
693 } else { 725 } else {
694 726
695 // We don't have a three-dimensional sparse model, 727 // We don't have a three-dimensional sparse model,
696 // so use a note model. We do have some logic (in 728 // so use a note model. We do have some logic (in
697 // extractStructure below) for guessing whether 729 // extractStructure below) for guessing whether
698 // this should after all have been a dense model, 730 // this should after all have been a dense model,
699 // but it's hard to apply it because we don't have 731 // but it's hard to apply it because we don't have
700 // all the necessary timing data yet... hmm 732 // all the necessary timing data yet... hmm
701 733
702 // std::cerr << "NoteModel" << std::endl;
703 model = new NoteModel(m_sampleRate, 1, false); 734 model = new NoteModel(m_sampleRate, 1, false);
704 } 735 }
705 736
706 } else { // haveDuration 737 } else { // haveDuration
707 738
708 if (dimensions == 1 || dimensions == 2) { 739 if (dimensions == 1 || dimensions == 2) {
709 740
710 // If our units are frequency or midi pitch, we 741 // If our units are frequency or midi pitch, we
711 // should be using a note model... hm 742 // should be using a note model... hm
712 743
713 // std::cerr << "RegionModel" << std::endl;
714 model = new RegionModel(m_sampleRate, 1, false); 744 model = new RegionModel(m_sampleRate, 1, false);
715 745
716 } else { 746 } else {
717 747
718 // We don't have a three-dimensional sparse model, 748 // We don't have a three-dimensional sparse model,
720 // extractStructure below) for guessing whether 750 // extractStructure below) for guessing whether
721 // this should after all have been a dense model, 751 // this should after all have been a dense model,
722 // but it's hard to apply it because we don't have 752 // but it's hard to apply it because we don't have
723 // all the necessary timing data yet... hmm 753 // all the necessary timing data yet... hmm
724 754
725 // std::cerr << "NoteModel" << std::endl;
726 model = new NoteModel(m_sampleRate, 1, false); 755 model = new NoteModel(m_sampleRate, 1, false);
727 } 756 }
728 } 757 }
729 758
730 if (m_audioModelMap.find(source) != m_audioModelMap.end()) { 759 if (m_audioModelMap.find(source) != m_audioModelMap.end()) {
772 SparseOneDimensionalModel *sodm = 801 SparseOneDimensionalModel *sodm =
773 dynamic_cast<SparseOneDimensionalModel *>(model); 802 dynamic_cast<SparseOneDimensionalModel *>(model);
774 if (sodm) { 803 if (sodm) {
775 SparseOneDimensionalModel::Point point(ftime, label); 804 SparseOneDimensionalModel::Point point(ftime, label);
776 sodm->addPoint(point); 805 sodm->addPoint(point);
806 return;
807 }
808
809 TextModel *tm =
810 dynamic_cast<TextModel *>(model);
811 if (tm) {
812 TextModel::Point point
813 (ftime,
814 values.empty() ? 0.5f : values[0] < 0.f ? 0.f : values[0] > 1.f ? 1.f : values[0], // I was young and feckless once too
815 label);
816 tm->addPoint(point);
777 return; 817 return;
778 } 818 }
779 819
780 SparseTimeValueModel *stvm = 820 SparseTimeValueModel *stvm =
781 dynamic_cast<SparseTimeValueModel *>(model); 821 dynamic_cast<SparseTimeValueModel *>(model);